我试图检测何时按下按钮,因此响应UIControlEventTouchUpInside事件,我已经尝试过了:
- (void)setHighlighted:(BOOL)highlighted
{
if (highlighted)
{
self.titleLabel.textColor = [UIColor whiteColor];
[self.circleLayer setFillColor:self.color.CGColor];
}
else
{
[self.circleLayer setFillColor:[UIColor clearColor].CGColor];
self.titleLabel.textColor = self.color;
}
}
但只有当手指在按钮上而没有释放时,我如何才能在子类中检测touchup内部动作?
你可以做的是在你的init方法中添加一个目标,并有一个布尔值来保持按钮状态:
在CustomButton.h@property(nonatomic,assign) BOOL selected;
在CustomButton.m - (id)initWithFrame:(CGRect)frame {
self = [super initWithFrame:frame];
if (self) {
self.selected = NO;
[self addTarget:self action:@selector(toggle:) forControlEvents:UIControlEventTouchUpInside];
}
return self;
}
- (IBAction)toggle:(id)sender{
self.selected = !self.selected;
if (self.selected)
{
self.titleLabel.textColor = [UIColor whiteColor];
[self.circleLayer setFillColor:self.color.CGColor];
}
else
{
[self.circleLayer setFillColor:[UIColor clearColor].CGColor];
self.titleLabel.textColor = self.color;
}
}
使用UIControlEventTouchDown
而不是UIControlEventTouchUpInside
,这样当按钮按下时,它的action方法将调用