Отказ от иерархии модальных представлений Элегантное решение

У меня есть такая иерархия представлений:

  1. Пользовательский контроллер представления (скажем, контроллер представления 1), показанный делегатом приложения.
  2. Другой контроллер представления (скажем, контроллер представления 2), показанный модально из контроллера представления 1.
  3. Другой контроллер представления (скажем, контроллер представления 3), показанный модально из контроллера представления 2.
  4. Есть еще один контроллер представления (скажем, контроллер представления 4), из которого мне нужно выполнить шаги 2 и 3.

Теперь для некоторых действий мне нужно отменить всю иерархию модальных представлений. Итак, что я делаю, так это отправляю уведомление об этом событии с контроллера представления 3 и прослушиваю это уведомление в контроллере представления, а затем выполняю:

[[NSNotificationCenter defaultCenter] removeObserver:self name:@"cancelViews" object:nil];

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

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


person Abhinav    schedule 23.04.2011    source источник


Ответы (1)


Использовать делегаты!

Если это не тот маршрут, который вы хотите выбрать (хотя я настоятельно рекомендую вам это сделать), вы можете настроить свой контроллер представления 1 и 4 для публикации различных событий, которые будет прослушивать ваш корневой контроллер представления.

person Wayne Hartman    schedule 24.04.2011
comment
Из-за некоторых технических проблем я не пошел по пути делегата. Что вы имеете в виду под разными событиями? Если вы говорите о другом имени уведомления, это не поможет, поскольку уведомления будут отправлены в одно и то же место. Итак, вместо одного тогда я опубликую 2 уведомления. То же место!!! - person Abhinav; 24.04.2011
comment
Вы смотрели в контроллер UINavigation? Может быть решение. - person TheBlack; 14.05.2011