Как инициализируется представление при загрузке через раскадровку? - PullRequest
59 голосов
/ 04 декабря 2011

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

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

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

1 Ответ

92 голосов
/ 04 декабря 2011

Когда представление загружается из пера или раскадровки, вызывается метод -initWithCoder:. Как и -initWithFrame:, -initWithCoder: является назначенным инициализатором для UIView. Если вы собираетесь выполнить какую-либо пользовательскую инициализацию для подкласса UIView, вы должны убедиться, что это происходит для обоих этих методов. Один из распространенных методов - добавить общий метод инициализации, который вы вызываете из -initWithFrame: и -initWithCoder:. См. мой ответ до Пользовательское представление и способ реализации init? для более подробного описания.

Обратите внимание, что документация для -initWithFrame: объясняет:

Если вы используете Interface Builder для разработки интерфейса, этот метод не вызывается, когда ваши объекты просмотра впоследствии загружаются из пера файл. Объекты в файле пера восстанавливаются и затем инициализируются используя их initWithCoder: метод, который изменяет атрибуты представление, соответствующее атрибутам, хранящимся в файле пера.

...