Я столкнулся с небольшой проблемой. Обычно при работе с UITableView я создаю специальный
метод configureCell, который строит ячейки, когда они нужны для tableView. Поэтому cellForRowAtIndexPath запрашивает configureCell, чтобы получить новую ячейку, если в кэше не найдено ни одной.
В части cellForRowAtIndexPath, которая запускается каждый раз, когда пользователь прокручивает:
- (UITableViewCell *)tableView:(UITableView *)theTableView cellForRowAtIndexPath:(NSIndexPath *)indexPath {
static NSString *CellIdentifier = @"Cell";
UITableViewCell *cell = [theTableView dequeueReusableCellWithIdentifier:CellIdentifier];
if (cell == nil) {
cell = [[[UITableViewCell alloc] initWithFrame:CGRectZero reuseIdentifier:CellIdentifier] autorelease];
[self configureCell:cell atIndexPath:indexPath];
}
//this part is always executed!
}
Я устанавливаю значения меток и т. Д. Из моей модели. Это прекрасно работает, и я считаю, что так и должно быть, чтобы работать должным образом и меньше всего загружать процессор. Из того, что я могу прочитать в TableView Guide.
Моя проблема в том, что первая ячейка в моем tableView отличается от других. У меня есть специальный значок и другие вещи, которые отделяют его от других ячеек.
В моей ячейке конфигурации я попытался спросить:
if (indexPath.row == 0) {
//do special setup!
}
Это плохая идея, поскольку tableView ленивый загружает ячейки, и поэтому первая неэкранная ячейка при прокрутке на экране также получает indexPath.row = 0
, так что теперь у меня есть «специальная ячейка» для каждой 7 кл.
Как мне обойти это?
Вторая проблема, которая также возникает из вышеприведенного: у меня есть пользовательский UIView
, размещенный во всех клетках accessoryView
. Когда пользователь нажимает кнопку «Редактировать», все дополнительные элементы ячеек должны измениться на значок, указывающий, что мы находимся в «режиме редактирования». Здесь, опять же, это происходит только для ячеек на экране, когда прокрутка «старых» ячеек либо извлекается из кэша, либо создаются новые ячейки, которые не знают, что мы находимся в режиме редактирования.
Когда вы нажимаете на ячейку, никогда не возникает никаких сомнений в отношении indexPath.row
подключенной ячейки, этот индекс необходимо связать с массивом модели, чтобы выяснить, что пользователь нажал. Но, похоже, применяются другие правила, когда TableView манипулирует ячейками (вытягивая их на экран, за кадром, удаляя, добавляя).
Наверное, я спрашиваю; чтобы следовать передовому опыту и не бороться с SDK, что я должен сделать, чтобы получить желаемую функциональность, и на каком этапе жизненного цикла Cell я должен применить эту логику?
Надеюсь, кто-то может направить меня в правильном направлении :) заранее спасибо :) 1029 *