Сохраняйте минимальное количество ячеек и по-прежнему используйте commitEditingStyle

#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 позже, посмотрим, будет ли это проще.. Спасибо!