UISplitViewController - лучший шаблон проектирования для связи между контроллерами представления - PullRequest
2 голосов
/ 01 декабря 2011

Я впервые использую UISplitViewController в своем приложении. Главный контроллер представления - это контроллер табличного представления, а контроллер подробного представления - просто контроллер простого представления.

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

Можно ли, чтобы мастер также был делегатом детали? Или это плохая практика программирования? Есть ли лучший подход для этого?

Спасибо за любые предложения.

Ответы [ 3 ]

1 голос
/ 01 декабря 2011

Вы можете предоставить протокол делегата, специфичный для вашей модели, который используется обоими контроллерами.Этот протокол может иметь такие методы, как itemContentDidChange:withIndex: и т. Д., Предоставляя слушателям информацию о том, что изменилось в модели.Если вы зарегистрируете оба контроллера в качестве делегатов для вашей общей модели, в которой оба реализуют этот общий протокол, зависимость между контроллерами будет удалена без каких-либо новых зависимостей.

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

0 голосов
/ 01 декабря 2011

Для них совершенно нормально быть делегатами друг друга.Там нет собственности, поэтому циклические ссылки.

0 голосов
/ 01 декабря 2011

Похоже, вам нужен только один делегат, так как detailView когда-либо нужно будет только указать masterView «reloadData» в списке. Данные, которые они оба используют, действительно должны быть общими и поэтому могут быть переданы в detailView в качестве указателя при создании, который он может затем изменить сам, прежде чем сказать masterView tableView перегрузить данные после завершения.

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