Могу ли я показать / скрыть определенную ячейку в UITableView в зависимости от состояния другой ячейки? - PullRequest
6 голосов
/ 15 января 2010

У меня есть UITableView со стилем «Сгруппированный», который я использую, чтобы установить некоторые параметры в своем приложении. Я бы хотел, чтобы одна из ячеек этого UITableView отображалась только в зависимости от того, активирована ли другая ячейка этого UITableView или нет. Если это не так, первая ячейка должна отображаться (желательно с плавной анимацией), если это так, первая ячейка должна скрываться.

Я попытался вернуть nil в соответствующем -tableView:cellForRowAtIndexPath:, чтобы скрыть ячейку, но это не сработало и вместо этого выдает исключение.

В настоящее время я застрял и не знаю, как решить эту проблему, поэтому я надеюсь, что некоторые из вас могут указать мне правильное направление.

Ответы [ 4 ]

11 голосов
/ 15 января 2010

Вы должны удалить данные за скрытыми ячейками из источника данных табличного представления.

Например, если вы используете массив, когда происходит действие, которое вызывает скрытие ячейки, вы удалите объект для этой строки из массива. Затем, как источник данных табличного представления, массив вернет на единицу меньше общего количества и вернет только действительные ячейки для каждой строки в этом количестве (без нуля).

При таком подходе может потребоваться поддержка второго массива со всеми объектами (включая скрытые).

Чтобы обновить представление, посмотрите reloadRowsAtIndexPaths: withRowAnimation: .

9 голосов
/ 15 января 2010

Вот удобное сообщение, в котором автор предоставляет некоторый исходный код для выполнения анимации в выбранной ячейке:

http://iphonedevelopment.blogspot.com/2010/01/navigation-based-core-data-application.html

Он использует это в контексте NSFetchedResultsController, но вы можете увидеть, как он использует различные вызовы для добавления / удаления ячеек и секций.

Теперь, в вашем случае, вам нужно изменить любой массив, который вы используете для размещения данных, используемых для генерации строк в вашем tableView, когда вы «активируете» свою ячейку, а затем выборочно использовать:

  • Tableview: insertRowsAtIndexPaths: withRowAnimation:
  • Tableview: deleteRowsAtIndexPaths: withRowAnimation:
  • Tableview: insertSections: withRowAnimation:
  • Tableview: deleteSections: withRowAnimation:

для соответствующей корректировки (вы можете начать с tableView: reloadData:, но это неэффективно).

Я понимаю, что API может быть немного пугающим, но найдите время, чтобы прочитать его и понять, что делают различные вызовы. Понимание того, как UITableView использует свой источник данных и делегат, а также цепочку событий, возникающих при выборе / удалении ячеек и т. Д., Важно, если вы хотите, чтобы все было правильно (и без сбоев).

2 голосов
/ 15 января 2010
[tableView beginUpdates];
[tableView deleteRowsAtIndexPaths:withRowAnimation:]; // or insertRowsAtIndexPaths:withAnimation:
[tableView endUpdates]; 
0 голосов
/ 15 января 2010

Перед вызовом cellForRowAtIndexPath вызывается numberOfRowsInSection. Вы должны вернуть соответствующее значение ячеек в разделе там, так что если вы хотите показать только 1 ячейку, верните одну. Логика показа ячеек должна быть частично реализована в обоих методах

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...