Ссылка на контроллер представления источника и контроллер представления назначения одновременно - PullRequest
0 голосов
/ 24 января 2012

В моем приложении есть серия контроллеров UIViewController.У большинства из них есть панель навигации, но некоторые скрывают ее.

Проблема в том, что иногда при переходе между видом с панелями навигации или без него на другой вид с панелями навигации или без них появляется черный ящик, который заменяет панель навигации во время перехода.Эта проблема обсуждалась здесь: Скрытие UIToolbar UINavigationController во время viewWillDisappear:

Это решение хорошо, и оно действительно избавляется от черного ящика, но я действительно не хочу то, что было описано какисчезновение "Чеширского кота".Я пробовал множество решений с использованием prepareForSegue, ViewWillAppear, viewWillDisappear и т. Д. Лучшее, что я могу сделать, это изменить сценарий, в котором появляется черная полоса.

Под этим я подразумеваю четыре комбинации переходов представлениямежду двумя состояниями панели навигации (скрытое и не скрытое):

  • Скрыто - Скрыто
  • Скрыто - Не скрыто
  • Не Скрыто - Скрыто
  • Не скрыто - Не скрыто

Независимо от того, какое решение я пробовал, по крайней мере одна из этих комбинаций приводит к тому, что мой черный ящик поднимает свою уродливую голову.Проблема, с которой я столкнулся, заключается в том, что я нигде не смог найти ссылку на контроллер представления источника и контроллер представления назначения при выталкивании вида из стека представления контроллера навигации.

Если бы я мог получить обе ссылки в одном и том же событии, я мог бы просто определить, что такое комбинация, и обработать поведение соответствующим образом, как при подготовке к переходу.

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

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

Большое спасибо, Патрик

1 Ответ

1 голос
/ 24 января 2012

Я думаю UINavigationControllerDelegate - это то, что вы ищете. Он объявляет два метода:

  • -navigationController:willShowViewController:animated:

  • -navigationController:didShowViewController:animated:

Все, что вам нужно сделать, - это установить себя в качестве делегата родительского контроллера навигации и реализовать эти методы для уведомления о входящих контроллерах представления.

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

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