你代码中虽继承了UIbutton重写了init,但是未重写buttonWithType:,所以在调用[MyUIButton buttonWithType:UIButtonTypeRoundedRect]时实际上调用了父类的buttonWithType:,父类的buttonWithType:调用了某种UIButton的init。
为什么我说是某种UIButton?因为UIButton的buttonWithType:可以生成不同类型的对象,这些对象都是UIButton的子类。(当然不可能生成MyUIButton类型的对象,也就无法响应setIdx:方法)
实际上,UIButton是一种聚类,你不能直接继承它。应当增加扩展,使用运行时增加关联对象。注意.m中引入了#import <objc/runtime.h>
:
@interface UIButton (IdxProperty)
@property (nonatomic,retain) NSString *idx;
@end
#import <objc/runtime.h>
@implementation MyUIButton
@dynamic idx;
@end
- (NSString *)idx
{
NSString *idx = objc_getAssociatedObject(self, @"kUIButtonIdxKey");
return idx;
}
- (void)setIdx:(NSString *)idx
{
objc_setAssociatedObject(self, @"kUIButtonIdxKey", idx, OBJC_ASSOCIATION_RETAIN);
}更干净的写法是给@"kUIButtonIdxKey"加个宏。此处我写的有点dirty
楼主,还是那句话,加强下面向对象的学习