2010-10-15 2 views
2

Как я должен написать метод инициализации для класса, который подклассов в NSObjectiPhone - Как написать метод init?

  • Скажем, у меня есть класс с именем: CustomButton подклассов UIButton
  • У меня есть пустой файл с именем острия CustomButton. nib, который содержит в себе один UIButton .
  • интерфейс строитель имя класса для кнопки установлено значение «CustomButton»

Как бы вы написать метод инициализации для этого класса, так что он загружает из файла СИБ?

ответ

7

Если вам нужна пользовательские инициализация внутри CustomButton, используйте:

- (id)initWithCoder:(NSCoder *)decoder { 
    if (self = [super initWithCoder:decoder]) { 
     /* do initialization here */ 
    } 
return self; 
} 

Это не будет называться, если экземпляр кнопки непосредственно в коде, только тогда, когда экземпляр б бобов погрузчика. Создание через код означает, что вам нужно использовать initWithFrame, чтобы переопределить это. Возможно, вы захотите, чтобы initWithCoder и initWithFrame вызывали один и тот же метод initAlways или что-то в этом роде.

Кроме того, важно знать концепцию Objective-C «назначенного инициализатора» (искать в объективных документах C), потому что это может немного запутать людей, привыкших к другим языкам OO.

+0

ПОЖАЛУЙСТА, предоставьте способ, которым вы создаете объект, используя этот метод init. для метода init требуется NSCoder, 1 - что это за nscorer? 2- Как мне его создать? 3- Я вызываю этот метод напрямую? – aryaxt

+0

Вы не создаете экземпляр самостоятельно. Файл nib - это в основном сериализованный набор объектов, загружаемых загрузчиком nib, поэтому загрузчик nib обрабатывает все материалы NSCoder для вас. Вам просто нужно сделать так, чтобы этот [супер ...] звонил. В основном переопределяющий initWithCoder, как это, просто вставляет ваш код в экземпляр объекта, который делает загрузчик nib. Надеюсь, что это имеет смысл .... – Nimrod

+0

На самом деле, вы, вероятно, захотите использовать awakeFromNib: вместо этого. Я забыл об этом, дух. см. http://stackoverflow.com/questions/2663333/what-method-of-uiview-gets-called-when-instantiated-from-a-nib – Nimrod

Смежные вопросы