为什么此UIButton在禁用时仍会触发事件处理程序

时间:2012-07-09 10:50:13

标签: iphone cocoa-touch ios5 uibutton

我在视图中有一个UIButton。我像这样附加一个事件处理程序:

[self.button addTarget:self  
           action:@selector(button_touchUpInside:)      
 forControlEvents:UIControlEventTouchUpInside];

处理程序如下所示:

-(void) button_touchUpInside:(id)sender
{
    NSLog(@"%@", ((UIButton *)sender).enabled ? @"ENABLED" : @"DISABLED"); // Logs DISABLED
   // Do stuff
}

我禁用了这样的按钮:

-(void)setEnabled:(BOOL)enabled
{
    enabled_ = enabled;
    self.button.enabled = enabled;
}

我的问题是,即使我在按钮上设置enabled = NOTouchUpInside仍会触发处理程序。我可以在处理程序中看到按钮被禁用,但处理程序仍然被触发。

请注意,有几种方法可以解决这个问题 - 检查处理程序中的button.enabled,@ sanchitsingh的答案等等。我想知道为什么会发生这种情况。

3 个答案:

答案 0 :(得分:3)

只需检查代码中是否包含任何手势。这可能会导致问题。 我想你应该使用

 button.enabled = NO;
 button.userInteractionEnabled = NO;

答案 1 :(得分:3)

根据我的个人经验,来自this question以及其他人在网络上进行操作,似乎Apple关于UIControl.enabled的文档不正确,并且禁用设置UIControl并不会阻止它触及事件。它只能中和一些事件,例如(从内存中,现在无法检查)点击,触摸和当前动作触发 事件,所以你有效地必须使用UserInteractionEnabled属性来真正摆脱触摸事件。

答案 2 :(得分:1)

试试这个

button.userInteractionEnabled=NO;