2012-04-15 3 views
0

Я создал UITableViewController для моего приложения, которое взаимодействует с моей базовой моделью данных. Это основная цель - нажать на навигационный контроллер и отобразить список сущностей и разрешить мне редактировать/выбирать и разворачивать в них информацию и т. Д.Использование UIViewController для протокола

Однако, в другом месте в моем приложении, теперь я хочу изменить отобразите простой выборщик, чтобы выбрать один из этих объектов. Я думаю, что лучший способ реализовать это - создать протокол для обработки сборщика, который может отправлять сообщения обратно моему делегату о том, был ли пользователь отменен или выбран объект и т. Д.

Поскольку такая кодировка будет представлять собой То же самое, мой вопрос заключается в следующем: возможно ли или в любом случае целесообразно включить UITableViewController в качестве протокола?

i.e при нормальном отображении он ведет себя так же, как и в настоящее время (стандартный подкласс UIViewController), но затем также может быть представлен модально делегатом и передавать сообщения делегату?

Увлечена своими мыслями о лучшей практике?

ответ

1

Вам даже не нужен формальный протокол. Просто дайте UITableViewController @property (nonatomic, assign) id delegate при создании экземпляра с другого контроллера. Установите это как делегат. Используйте id, чтобы не сочетать ваши классы слишком сильно и не сохранять делегата.

Внесите два метода для didCancelPicking...:(id)sender и didPick...:(id)sender item:(id)pickedItem в вызывающий контроллер.

Теперь, когда вы просматриваете UITableViewController, вам нужно сделать две вещи. Поставьте кнопку отмены + отреагируйте на это (didCancelPicking...) и, возможно, измените tableView:didSelectRowAtIndexPath:, чтобы отправить делегату didPick.... Всегда проверяйте делегата с respondsToSelector: и в случае, если он performSelector:withObject:. Всегда отправляйте отправителя как первый аргумент в этих методах делегата.

Кроме того, всегда отображать и скрывать модальный контроллер от вызывающего класса. Не позволяйте, например, удалять себя из UINavigationController.

Это лучшие практики, которые я могу придумать с верхней части своей шляпы.

Что касается повторного использования вашего конкретного кода здесь: вам нужно решить, слишком ли запутан ваш код при повторном использовании этого UITableViewController и хотите изменить, как он себя ведет, когда он показан в моделях. Например. вы можете позже захотеть предотвратить редактирование и сверление в этом случае. Конечно, вы можете инкапсулировать это в if (self.delegate) проверках, но ...

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