Пользовательский метод инициализации UIVIewController - PullRequest
3 голосов
/ 04 июня 2010

Я хочу реализовать собственный метод инициализации для моего подкласса UIViewController, чтобы "заменить" метод initWithNibName.

Это код:

- (id) initWithMessage:(NSString *)message {
    if ((self = [super initWithNibName:@"ToolTip" bundle:nil])) {
        label.text = message;
    }

    return self;
}

Метка загружается из xib, но на этом этапе ссылка на метку равна nil (возможно, потому что xib еще не загружен?). Кто-нибудь знает решение для этого? Спасибо

Ответы [ 2 ]

12 голосов
/ 20 января 2011

Я знаю, что это старый вопрос, но правильный ответ - использовать метод viewDidLoad для выполнения дополнительных настроек после загрузки представления. Представление не загружается до тех пор, пока оно не потребуется, и может быть выгружено при получении предупреждения о памяти. По этой причине к виду контроллера представления не следует прикасаться методом init.

1 голос
/ 09 июля 2010

Вы должны объявить метку программно и инициализировать ее в init, а не делать это из пера.

Вот как:

Предположим, UILabel *label является переменной класса, для которой определены @property и @synthesize.

- (id) initWithMessage:(NSString *)message {

    if ((self = [super initWithNibName:@"ToolTip" bundle:nil])) {
        label = [[UILabel alloc] init];
        label.text = message;
        [self.view addSubView:label];
    }

    return self;
}

Снять метку в методе dealloc. Надеюсь это поможет.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...