Подклассы UIButton


Мне нужно, чтобы подкласс UIButton, однако дизайн UIButton делает это очень больно. Это потому, что для создания кнопки, что вам действительно нужно вызвать:

[UIButton buttonWithType:UIButtonTypeRoundedRect]

Так что если я хочу подкласс, мне действительно нужно делать то, что этот метод делает. Однако, это не возможно, чтобы установить кнопки базового типа.

Один вариант-использовать что-то вроде декоратора и подкласс UIButton , но собственно кнопку как Ивар и отложить все имущество,/способ вызова этой кнопкой. Проблема здесь заключается в том, что тогда мне нужно, чтобы реализовать большинство UIButton интерфейс (зевок).

Что я сделал что-то немного похитрее в мой суб-класса. Я создал этот метод:

- (id) initWithType:(UIButtonType)buttonType
{
    [super init];

    actualButton = [[UIButton buttonWithType:buttonType] retain];

    memcpy(self, actualButton, sizeof(UIButton));
    self->isa = [ABDescriptorButton class];

    return self ;
}

Я знаю, что это довольно необычно, но это работает и довольно чисто в плане кода. Какие подводные камни я мог бы с таким подходом?



Комментарии
2 ответа

Вам не нужно сделать initWithType: метод. Просто переопределить buttonWithType: заводской способ.

4
ответ дан 15 апреля 2011 в 10:04 Источник Поделиться

Я думаю, что я понял эту проблему сам. Управление памятью становится очень смущен, потому что мы сейчас, по сути, отслеживание двух объектов, которые на самом деле один и тот же объект.

1
ответ дан 11 марта 2011 в 04:03 Источник Поделиться