Как iOS узнает, какой контроллер представления должен быть активным? - PullRequest
2 голосов
/ 23 марта 2011

Если я хочу заменить один экран приложения другим, но я не использую контроллер navbar / tabbar, то я могу просто удалить oldViewController.view из окна и добавить к нему newViewController.view. Вот и все, теперь newViewController будет получать события вращения и т. Д.

Но UIView не ссылается на «свой» контроллер, так как это возможно, откуда iOS знает, что он должен сделать newViewController активным? IOS делает что-то волшебное, она внутренне ссылается на контроллер из поля зрения или как?

UPDATE:

Я думаю, что меня неправильно поняли: я не спрашиваю, как сделать какой-то контроллер представления активным - я это знаю. Мне просто любопытно, как это возможно, что я передаю некоторое представление объекту UIWindow ([window addSubview: view]), и он каким-то образом находит контроллер представления, хотя view не знает своего контроллера.

Ответы [ 3 ]

3 голосов
/ 28 мая 2011

да у меня был такой же вопрос, как и у вас. и я понял это.

UIView является производным от UIResponder. и UIView должен иметь подкласс UIResponder :: nextResponder.

Его реализация по умолчанию возвращает контроллер представления (если это не так, это был бы супер-вид)

Итак, представление может видеть свой контроллер. это означает, что окно знает самый верхний вид, а также

его контроллер.

удачи.

2 голосов
/ 23 марта 2011

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

Если вы не используете контроллер navbar / tabbar, вам придется каждый раз добавлять и удалять из Window, чтобы сохранить только один, если вы хотите иметь события.

1 голос
/ 23 марта 2011

Основной класс UIWindow для вашего приложения будет иметь контроллер представления, установленный в его свойстве rootViewController. Представление этого контроллера является «основным» представлением для приложения. Обычно это настройка в основном .xib для проекта. Этот контроллер представления будет получать обычные события, такие как «viewDidAppear» или «willRotateToInterfaceOrientation». Вы можете выставить свой собственный вид поверх него, если хотите, но вам нужно будет самим управлять этими событиями. Обычно вы этого не делаете. Вы просто используете UINavigationController или UITabBarController в качестве вашего rootViewController и позволяете им управлять передачей событий на новые контроллеры «выдвигаемого» представления или всплывающие контроллеры представления с «presentModalViewController».

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