Вопрос о представлении View Controller - PullRequest
3 голосов
/ 04 января 2011

Когда мы получаем доступ к свойству View Controller, оно всегда представляет весь экран или оно может быть частичным?

Косвенно говоря, может ли View Controller иметь несколько свойств представления?

Ответы [ 2 ]

6 голосов
/ 04 января 2011

donkim прав, но не верьте мне на слово;)

Смотрите это сообщение Rincewind: https://devforums.apple.com/thread/81930 и любое количество более старых комментариев от других сотрудников Apple на их форумах.

Если я понимаю, что вы говорите, вы создали другой контроллер представления (BlueViewController) и добавили его представление как подпредставление другого контроллера представления?Если это так, то это покрывается документами - в частности, чтобы не делать этого, потому что он не поддерживается.
Контроллер представления предназначен для управления стоимостью содержимого всего экрана.Если вы хотите подразделить свой контент дальше, то рекомендуется использовать объекты, отличные от подклассов UIViewController, для управления этими субрегионами и управления этими объектами с помощью подкласса UIViewController.

Кроме того, у нас есть Ссылка на класс UIViewController , которая гласит:

Вы используете каждый экземпляр UIViewController для управления иерархией представления.Типичная иерархия представлений состоит из корневого представления, ссылка на которое доступно в свойстве представления этого класса, и обычно одного или нескольких подпредставлений, представляющих фактическое содержимое.На iPhone и iPod touch корневой вид обычно занимает весь экран, но на iPad этот вид может занимать только часть экрана.В обоих случаях контроллер представления отвечает за управление всей иерархией представления, включая все подпредставления.

, а также Руководство по программированию контроллера представления для iOS :

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

К сожалению, ни один из них не являетсятак явно, как хотелось бы, о , почему UIViewController делает эти предположения и когда может быть безопасно их нарушать.Из того, что я могу сказать без доступа к коду UIKit где-то, UIKit предполагает, что один контроллер представления будет отвечать за заданную ценность содержимого экрана.Поэтому в некоторых случаях он отправляет сообщения типа -viewWillAppear: или -didRecieveMemoryWarning только на один (или, может быть, только на некоторые) контроллеры представления, если в одном окне отображается несколько контроллеров представления.Должна быть возможность продемонстрировать это, по крайней мере, несколькими различными способами, хотя я не проверял все это в последнее время, поэтому я ухожу от проблем, о которых сообщали другие пользователи.Вложенные контроллеры представления не будут получать -didReceiveMemoryWarning. Представление контроллера с несколькими представлениями не будет вращаться, если вращение происходит, когда представлен контроллер модального представления, а затем модальное отклоняется.Иногда ожидается, что представления контроллеров представления будут заполнять окно и быть непрозрачными, поэтому содержимое, отображаемое в областях окна, которые они не покрывают, может быть неопределенным.Попытка представить контроллер модального представления, который не заполняет экран, не будет отображать базовые представления, по крайней мере в iOS 3.1.x или любой другой последней версии, которую я пробовал.


Чтобы попытаться напрямую ответить на hmthur'sвопрос.UIViewController должен иметь одно корневое представление (его свойство 'view'), которое заполняет окно и может обрабатывать изменение размера в соответствии со строками состояния, панелями вкладок и т. Д.Этот контроллер может иметь любое количество вложенных представлений этого корневого представления и свойств, которые ссылаются на эти вложенные представления.


В качестве дальнейшего обновления рассмотрим этот поток на " Создание контейнерных подклассов UIViewController? "на форумах разработчиков Apple (обсуждается настройка parentViewController для создания пользовательских контроллеров контейнерных представлений).

Все ивы UIKit считаются частными, и их прямой доступ не поддерживается, включая доступ через setValue: forKey :.Метод, который устанавливает этот ivar, также является закрытым.

Что касается этого ivar [parentViewController], я предупреждаю вас, что его поведение может измениться.предложения для альтернатив, хотя для того, чтобы это стоило, мы признаем трудность в создании контроллеров представления контейнера.

0 голосов
/ 04 января 2011

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

Для вашего второго вопроса любой UIView может добавить другие UIView с помощью метода addSubview:. Так что да, в некотором смысле в UIViewController может быть несколько представлений (хотя будет только одно свойство view).

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