子类UIButton并检测UIControlEventTouchUpInside

时间:2014-05-23 09:36:30

标签: ios objective-c uibutton

我正在尝试检测按下按钮的时间,因此响应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;
    }
}

但是只有当手指放在按钮上并且没有释放时,我才能在子类中检测到内部动作的触摸?

2 个答案:

答案 0 :(得分:1)

你可以做的是在你的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;
    }
}

答案 1 :(得分:0)

使用UIControlEventTouchDown代替UIControlEventTouchUpInside,这样当您的按钮关闭时,它的操作方法就会调用。