Что делает метод UITableView "deleteRowsAtIndexPaths: withRowAnimation:"? - PullRequest
1 голос
/ 14 мая 2009

******** Обновление на вопрос **********

Если вид таблицы не влияет на модель: Изменены ли пути индекса экранных ячеек, чтобы они отражали их фактическое положение, ИЛИ индексы удаленных ячеек не видны до вызова reloadData?

******* Оригинальный вопрос **********

Я знаю, что это помечает ячейки для удаления и оживляет удаление, но что это делает с моделью?

Влияет ли это на модель (не могу себе представить)?

Клетки "все еще там", но невидимы?

Когда пользователь начинает прокручивать, он пропускает вызовы делегатов для удаленных индексов?

Ожидается ли обновление модели?

Кажется расплывчатым из того, что я прочитал до сих пор ...

Ответы [ 2 ]

5 голосов
/ 14 мая 2009
  • (void) deleteRowsAtIndexPaths: (NSArray *) indexPaths withRowAnimation: (UITableViewRowAnimation) анимация;

Удаляет строки из таблицы. Это не меняет вашу модель вообще. Вы должны сделать это самостоятельно. Ячейки удаляются, но если вы вызываете reloadData перед удалением строки из вашей модели. Ячейка появится снова.

Так что, да, он ожидает от вас обновления вашей модели.

1 голос
/ 14 мая 2009

UITableView - это ВИД, помните, что UIKit строго основан на MVC. Вы несете ответственность за обновление модели. Infact, ваш контроллер, вероятно, будет вызывать (void)deleteRowsAtIndexPaths:(NSArray *)indexPaths withRowAnimation:(UITableViewRowAnimation)animation; в ответ на наблюдение (или уведомление) об изменении в вашей модели.

Например, скажем, у вашего интерфейса есть «удалить 10 случайных элементов». Правильный поток для этого:

  1. просмотр - пользователь нажимает кнопку
  2. контроллер - получает нажатие кнопки обновления модели
  3. контроллер - наблюдает за изменениями в модели
  4. просмотр списка обновлений

Хотя это кажется немного надуманным - почему бы не заставить представление просто обновить список и сообщить модель? это сделает лучший код, который будет легче понять и который лучше работает с UIKit. Например, эта конструкция не предполагает, что контроллер в 2 и 3 - это один и тот же контроллер, поэтому вы обладаете большей гибкостью.

Я бы обычно использовал YAGNI для создания дизайна, но я считаю, что сильный фокус MVC или UIKit означает, что YAGNT (вы собираетесь ...)

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