self.view = aViewController.view vs [aViewController loadView] -
Я пытаюсь понять поведение контроллеров представления при переключении с одного на другое (отображение разных представлений)
Часть из операторов addSubiew, которая, кажется, работает, я не могу найти объяснения тому, что происходит с двумя операторами:
self.view = someViewController.view; [someViewController loadView];
На самом деле я получил случай, когда кажется, что работает только первый (отображается представление, определенное в someViewController), а в другом случае - только второй.
Точнее, от корневого viewController.view до другого ViewController.view (уже istantiated) я должен использовать первый, чтобы вернуться, мне нужно использовать второй. Я не могу понять, в чем может быть разница в текущей ситуации, которая позволяет тому или иному заявлению работать.
Спасибо
2 ответа
Похоже, у вас есть некоторые неправильные представления о том, как работают контроллеры представления.
С этими двумя утверждениями есть пара неправильных вещей:
self.view = someViewController.view;
Согласно документам UIViewController.view:
"Каждый объект контроллера представления является единственным владельцем своего представления. Вы не должны связывать один и тот же объект представления с несколькими объектами контроллера представления". Яблочные Документы
Как только эта строка кода будет выполнена, представление будет иметь 2 разных контроллера, что плохо.
Следующая строка:
[someViewController loadView];
Это плохо, потому что вы никогда не должны явно вызывать loadView.
Из документов UIViewController.loadView:
"Вы никогда не должны вызывать этот метод напрямую".
Из документов UIViewController.view:
"Если вы обращаетесь к этому свойству и его значение в настоящий момент равно nil, контроллер представления автоматически вызывает метод loadView и возвращает полученное представление".
Потратьте некоторое время с учебниками и руководствами по ViewController, такими как "Руководство по программированию View Controller для iPhone OS". Они хорошие документы и могут многому научить.
Очень трудно даже понять твой вопрос. Но я попытаюсь ответить на это:
IPhone OS использует стек представлений и отображает первое для пользователей. Вы либо добавляете (удаляете), либо добавляете (добавляете) представления в этот стек.
Код, который вы предоставили, несколько "неясен". Лучшая практика для получения контроля - это добавить подвиды в ваше окно или любой другой вид.
т.е. [window addSubview:viewController.view];
Не переопределяйте свой текущий вид с помощью self.view = someViewController.view
; Вместо этого инициализируйте ваш новый ViewController и добавьте его представление в подпредставление вашего текущего представления.
Любые вопросы? Просто комментируйте.