#iphone #objective-c #uitableview
#iPhone #objective-c #uitableview
Вопрос:
В моем TableView я хочу всегда отображать не менее 3 ячеек. Если ячейки нет, покажите 3 фиктивные ячейки, если есть одна ячейка, отобразите эту и 2 «фиктивные ячейки», из которых 2 ячейки, покажите их и одну фиктивную ячейку, если есть 3 ячейки, покажите эти 3, если есть 4, отобразите их для, ии так далее.
Итак, я реализовал commitEditingStyleForRowAtIndexPath, и это работало бы нормально, если бы у меня не было
- (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section {
if ([self.piggyBanks count]< 3) {
return 3;
}
else{
return [self.piggyBanks count];
}
}
Поскольку он ожидает, что после удаления будет на одну строку меньше, он выдает исключение, если я получаю от 3 до 2 или менее ячеек (и, следовательно, снова возвращаю 3 в numberOfRowsForSection).
Есть идеи, как я могу этого добиться?
Спасибо
Ответ №1:
В вашем commitEditingStyleForRowAtIndexPath
не удаляйте строку, которая должна быть удалена, если она будет заменена фиктивной строкой. Вместо этого сообщите TableView перезагрузить эту конкретную строку.
Ответ №2:
Это сообщение на форуме привело меня к решению.
Это немного сложно, может быть, я тоже попробую версию edsko позже, но я думаю, что это также может стать проблемой, так как мне придется прибегать к ячейкам..
Основная проблема заключалась в том, что когда у меня есть 1 реальная ячейка, у меня есть 2 фиктивные ячейки, поэтому последнее возвращенное число строк было 3. Если я удалю одну оставшуюся ячейку, commitEditing ожидает 2 в качестве нового результата, но это будет либо 3, если я просто скажу, если количество моих массивов меньше 3, верните 3, или это будет 0, если я просто верну количество массивов.
Итак, в основном я сделал то, что предложил пост на форуме, но также создал свойство, хранящее последнее возвращенное число строк. Если numberOfRows вызывается из commitEditing, я сначала верну последнее зафиксированное число -1, чем перезагружаю данные, на этот раз со значениями, которые мне действительно нужны.
Это сработает, только если я буду удалять по одной строке за раз, но настройки моего приложения не позволяют удалять более 1 строки за раз.. Так что это сработает для меня.. Не так элегантно, но возможно..
Я попробую версию edskos позже, посмотрим, будет ли это проще.. Спасибо!