2012-01-20 4 views
0

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

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

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

Спасибо.

+0

'reloadData' действительно плохо с точки зрения UX. Используйте insertRowsAtIndexPaths: withRowAnimation :, deleteRowsAtIndexPaths: withRowAnimation: и т. Д., Избегая проблем с положением прокрутки и выбором. –

ответ

2

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

+0

Работал отлично! Последующее наблюдение: где следует «удалить уведомление»? Я предполагаю в viewDidUnload в главном представлении? – wayneh

+0

Теоретически удаление должно быть, когда вам больше не нужно больше слушать. Таким образом, это зависит от ваших потребностей, но обычно, так как вам нужно слушать, пока приложение запущено, удаление должно быть, когда приложение (или этот конкретный вид) уходит. Одним из вариантов может быть 'viewDidUnload', а другой может быть' dealloc'. Это зависит от того, когда вы хотите, чтобы удаление произошло. – antf

+0

Отлично - спасибо еще раз! – wayneh

0

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

0

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

0

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

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

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

а в viewB, когда вы сделали что делает модификацию U Вызов

[delegate updateTable]; 

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

Также этот метод будет вызываться, прежде чем вы вытащите viewB out.

+0

Я не пробовал это, но это тоже кажется довольно простым решением - спасибо. – wayneh

Смежные вопросы