Подтвердить что ты не робот

Как инициализируется представление при загрузке через раскадровку?

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

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

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

4b9b3361

Ответ 1

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

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

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