Где правильное место для перезагрузки данных TableView? - PullRequest
0 голосов
/ 20 января 2012

В моем проекте есть несколько контроллеров представления, скажем, A и B. У меня есть UITableView. Когда строка выбрана, я передаю номер строки и текст ячейки для просмотра B, затем pushViewController B.

В представлении B, нажимая кнопку «Готово», я изменяю базовые данные (прямо сейчас массив Singleton), а затем возвращаюсь к представлению A. В представлении A viewDidAppear я перезагружаю UITableView, чтобы увидеть новые данные. .

Это лучший способ сделать это? Или я должен перезагрузить UITableView при нажатии кнопки «Готово»? Если да, то как мне перезагрузить таблицу в представлении A из представления B?

Спасибо.

Ответы [ 4 ]

2 голосов
/ 20 января 2012

Лучше перезагрузить данные напрямую, когда вы нажмете кнопку «Готово». Вы можете сделать это через Центр уведомлений. Пожалуйста, проверьте эту ссылку для более подробной информации о Центре уведомлений.

0 голосов
/ 20 января 2012

Вместо использования NSNotification.Вы можете назначить представление A для делегата представления B. Это гораздо более чистый шаблон проектирования.

Таким образом, в представлении A это будет выглядеть как

ViewB *b = [[ViewB alloc] init];
b.delegate = self;

и в представлении B, когда вы закончите делатьизменение u вызов

[delegate updateTable];

, где в updateTable - это метод @required в объявлении делегата, и так как его требуемый viewA должен будет реализовать его, если он говорит, что он соответствует этому делегированию.

Такжеэтот метод будет вызван до того, как вы откроете viewB.

0 голосов
/ 20 января 2012

В этом нет ничего особенного, за исключением того, что ваша таблица будет перезагружаться при каждом вызове viewDidAppear, что может быть не очень хорошо в зависимости от размера таблицы. Лучший способ - использовать @protocol и создать шаблон быстрого делегирования, хотя это может показаться ненужной головной болью, если вы к этому не привыкли. Вы также можете использовать NSNotifications, хотя я бы не стал настаивать на его использовании в этом случае, так как не так много наблюдателей слушают событие.

0 голосов
/ 20 января 2012

ViewController "A", безусловно, должен отвечать за решение перезагрузить данные таблицы. Я хотел бы подумать о том, чтобы поместить это в метод viewWillAppear ViewController A. Таким образом, таблица будет перезагружена перед отображением для предотвращения и «мерцания».

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