Отношения между UIViewController и UIView - PullRequest
2 голосов
/ 08 августа 2010

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

Также это из Какао или Objective-C?

Ответы [ 2 ]

4 голосов
/ 08 августа 2010

UIViewController не поставляется автоматически с видом. Вы должны сделать представление в методе -loadView. По умолчанию это загружает представление из указанного вами файла пера. Вы также можете переопределить этот метод, чтобы создать собственное представление, если вы предпочитаете не использовать перо.

Кроме того, представление не создается правильно при создании UIViewController. UIViewController использует технику, известную как lazy-loading , чтобы отложить создание представления до фактического доступа к представлению впервые.

4 голосов
/ 08 августа 2010

UIViewController - это класс Cocoa Touch, созданный для управления UIViews. Предполагается, что у него будет иерархия представлений, но вы «автоматически» не получите представление ( это немного неточно; см. Правку ниже ). Обычно вы получаете представления, вызывая initWithNibName на вашем контроллере представления.

Существует некоторая встроенная магия в Интерфейсном Разработчике, которая знает, что если Владельцем Файла является UIViewController (или подкласс), существует свойство, называемое видом. Вот и все.

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

Редактировать : коррекция - если вы не вызываете initWithNibName или не устанавливаете свойство представления вручную, средство получения свойства представления вызовет loadView, если представление равно nil. Реализация loadView по умолчанию увидит, если вы установили nibBundle и nibName, и попытаетесь загрузить оттуда представление (именно поэтому у вас нет для вызова initWithNibName, чаще всего), но эти свойства не установлены, он будет создавать экземпляр объекта UIView со значениями по умолчанию. Технически, да, он автоматически поставляется с собственным UIView, но большую часть времени это мало что дает.

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