创建了我自己的按钮子类,我得到了 - [UIRoundedRectButton setup]:无法识别的选择器发送到实例0x7c3e600'。
我认为这是因为buttonWithType只是返回一个明显不属于橙色按钮的按钮,但无法弄清楚如何做到这一点!
@implementation OrangeButton
+(id)Create
{
OrangeButton *button = (OrangeButton*)[OrangeButton buttonWithType:UIButtonTypeRoundedRect];
[button setup];
return button;
}
-(void) setup
{
[self setBG];
}
-(void)setBG
{
[self setBackgroundImage:[UIImage imageNamed:@"bg-button-orange.gif"] forState:UIControlStateNormal];
}
@end
答案 0 :(得分:1)
我最近遇到了类似的问题。 UIButton实际上是一个类集群 - 即当您实例化UIButton时,您可能会返回一个内部Button类(可能是不同的类,具体取决于按钮类型,但这是一个实现细节)。有几个像这样的Apple类(NSData是另一个)。
不幸的是,这意味着(实际上)不可能继承UIButton。如果您需要类似的功能,但又不想/不能使用直接的UIButton,那么附带UITapGestureRecogniser的UIView将是我的第一个调用点。
修改强>
将UITapGestureRecognizer附加到UIView为UIButton提供了非常相似(以及额外的额外,例如可变数量的抽头)功能。但是,而不是写下以下内容:
[someButton addTarget:aTarget action:yourSelector forControlEvents:UIControlEventTouchUpInside];
您需要创建并附加手势识别器:
UITapGestureRecognizer *tgr = [[UITapGestureRecognizer alloc] initWithTarget:aTarget action:yourSelector];
yourUIView.userInteractionEnabled = YES;
[yourUIView addGestureRecognizer:tgr];
如果要围绕边缘,请添加:
yourUIView.layer.cornerRadius = 5 // example value
要获取图层属性,您需要导入QuartzCore.h标头。
答案 1 :(得分:1)
我认为它可能,因为我创建了自定义类
在.h,文件
@interface OrangeButton : UIButton
{
}
-(void) setBG;
@end
在.m文件中
@implementation OrangeButton
- (id) initWithFrame: (CGRect)frame
{
self = [UIButton buttonWithType: UIButtonTypeRoundedRect];
// set frame
self. frame = frame;
if (self)
{
// change bg color
[self setBG];
return self;
}
return nil;
}
-(void) setBG
{
[self setBackgroundImage:[UIImage imageNamed:@"bg-button-orange.gif"] forState:UIControlStateNormal];
}
- (void)dealloc
{
[super dealloc];
}
@end
现在,当您想要使用它时,请致电
OrangeButton *obj= [[OrangeButton alloc] initWithFrame: CGRectMake(0, 0, 90, 40)];
[obj setContentMode: UIViewContentModeScaleAspectFit];
// add it to the view
[self addSubview: obj];
// assign action
[obj addTarget: self action: someAction forControlEvents: UIControlEventTouchUpInside];
我认为这样做会