Мне нужно добавить два дополнительных свойства (NSString * и NSMutableArray *) вместе с тремя дополнительными методами в UIButton. Я также хочу ссылаться на новые объекты, используя супертип, если это возможно. Я не обязательно хочу создавать подклассы (поскольку я читал, что это сложно и не рекомендуется), но я довольно новичок в разработке Objective-C и iOS и не знаю, что еще делать.
Я попытался создать подкласс UIButton с моим подклассом, реализующим формальный протокол следующим образом:
@interface Button : UIButton <MyProtocol> ...
Однако я обнаружил, что это не работает так, как я думал, потому что buttonWithType: возвращает объект из подкласса. Что еще я могу сделать, чтобы достичь желаемого результата?
- РЕДАКТИРОВАТЬ:
Хорошо, мой текущий код выглядит так:
@interface Button : UIButton <SteapeObject> {
ActionQueue * actions;
Meta meta;
}
@property (nonatomic, retain) ActionQueue * actions;
@property (nonatomic) Meta meta;
- (id) initWithFrame:(CGRect)frame;
...
И реализация:
- (id) initWithFrame:(CGRect)frame {
if (self = [super initWithFrame:frame]) {
NSLog (@"finally");
}
return self;
}
Все еще не работает. Кажется, что когда я призываю:
Button * button = [Button buttonWithType: UIButtonTypeRoundedRect];
NSLog (@"%@", [button description]);
Я должен получить две строки 'finally' и два описания в журнале. Однако я получаю только две строки описания:
[Session started at 2011-02-24 09:47:14 +0100.]
2011-02-24 09:47:15.431 IphoneClient3[702:207] <UIRoundedRectButton: 0x5f47690; frame = (0 0; 0 0); opaque = NO; layer = <CALayer: 0x5f47240>>
2011-02-24 09:47:15.461 IphoneClient3[702:207] <UIRoundedRectButton: 0x6a0f000; frame = (0 0; 0 0); opaque = NO; layer = <CALayer: 0x6a344b0>>
И вы можете видеть, что тип все еще UIRoundedRectButton, но кнопки не реагируют на мои добавленные методы. На самом деле, поскольку мой переопределенный initWithFrame не вызывается, этого следовало ожидать. Возможно, я должен по умолчанию реализовать пользовательский элемент управления ...