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