Вернуть настроенный UIButton в методе? - PullRequest
0 голосов
/ 24 сентября 2011

У меня есть метод, который принимает UIButton, изменяет его свойства и возвращает UIButton. Однако, это никогда не кажется инициализированным. Я уверен, что я делаю что-то не так с управлением памятью здесь, но точно не знаю, как это исправить. Ошибки во время выполнения не возникают.

Это называется так ...

newGameBtn = [self customButtonFromButton:newGameBtn
                                 withText:[NSString stringWithFormat:@"NEW GAME"]
                             withFontSize:22
                          withBorderColor:[UIColor orangeColor]
                                 isSilent:YES];
[dashboardContainer addSubview:newGameBtn];

Метод определяется следующим образом ...

- (UIButton*) customButtonFromButton:(UIButton*)button withText:(NSString*)text withFontSize:(int)fontSize withBorderColor:(UIColor*)borderColor isSilent:(BOOL)isSilent {
    button = [[[UIButton alloc] init] autorelease];

    // Set properties from parameters
    // Other conditional custom stuff here

    return button;
}

ПРИМЕЧАНИЕ: newGameBtn имеет тип UIButton * и инициализируется с помощью: newGameBtn = [[UIButton buttonWithType:UIButtonTypeCustom] retain];

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

Ответы [ 2 ]

2 голосов
/ 24 сентября 2011

Вы должны использовать +[UIButton buttonWithType:] при создании кнопок, чтобы получить правильно инициализированную кнопку.

Большинство классов неправильно инициализируются методом -[NSObject init] по умолчанию. Поэтому, пожалуйста, посмотрите на ссылку класса или ссылку на суперкласс, чтобы найти пригодный метод инициализации.

В этом случае вы также должны установить frame.

1 голос
/ 24 сентября 2011

Вы не модифицируете эту кнопку своим методом, вы создаете совершенно новую с помощью alloc-init!

Если вы хотите изменить кнопку в первом аргументе, просто удалите первую строкуваш метод

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