Доступ к розеткам в пользовательском классе UIButton после инициализации - PullRequest
0 голосов
/ 15 июня 2011

Если у вас есть собственный класс UIButton и вы хотите получить доступ к его выходу titleLabel после инициализации.Обычно это можно сделать в методе viewDidLoad, но это работает только для классов Controller.Как бы вы получили доступ к любому выходу базового класса непосредственно после инициализации?

Вот небольшой фрагмент кода, потому что в большинстве случаев он более понятен после

- (id) initWithCoder:(NSCoder *)aDecoder {
    self = [super initWithCoder:aDecoder];
    if (self) {
        // Here the outlet is still 'nil'
    }
    return self;
}

- (void) viewDidLoad {
    // Not usable with UIControls
}

1 Ответ

2 голосов
/ 15 июня 2011

Реализация -awakeFromNib в вашем UIButton подклассе.

Из официальной документации :

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

Вы должны вызвать супер реализацию awakeFromNib, чтобы предоставить родительским классам возможность выполнить любую дополнительную инициализацию, которая им требуется.Хотя реализация по умолчанию этого метода ничего не делает, многие классы UIKit предоставляют непустые реализации.Вы можете вызывать супер реализацию в любой момент во время вашего собственного метода awakeFromNib.

...