3

我在视图中有一个 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 = NO在按钮上设置了 aTouchUpInside仍然会触发处理程序。我可以在处理程序中看到该按钮被禁用,但是处理程序仍然被触发。

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

4

3 回答 3

4

只需检查您的代码中是否涉及任何手势。这可能会导致问题。我认为你应该只使用

 button.enabled = NO;
 button.userInteractionEnabled = NO;
于 2012-07-09T13:01:22.850 回答
4

根据我的个人经验,从这个问题和网络上的其他线程来看,Apple 关于UIControl.enabled的文档似乎是不正确的,并且设置 UIControl disabled 并不能阻止它获取触摸事件。它只抵消了一些事件,例如(从内存中,现在无法检查)单击、触摸和当前动作触发事件,因此您必须有效地使用 UserInteractionEnabled 属性才能真正摆脱触摸事件。

于 2012-07-10T07:06:50.800 回答
1

试试这个

button.userInteractionEnabled=NO;
于 2012-07-09T10:56:53.570 回答