Увольнение модальной иерархии представлений - элегантное решение - PullRequest
0 голосов
/ 24 апреля 2011

У меня есть иерархия представлений, подобная этой:

  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 показано и, наконец, когда выдается уведомление, обе мои иерархии вида исчезают.

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

1 Ответ

1 голос
/ 24 апреля 2011

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

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

...