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 и добавьте его представление в подпредставление вашего текущего представления.

Любые вопросы? Просто комментируйте.

Другие вопросы по тегам