我在视图中有一个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
,TouchUpInside
仍会触发处理程序。我可以在处理程序中看到按钮被禁用,但处理程序仍然被触发。
请注意,有几种方法可以解决这个问题 - 检查处理程序中的button.enabled,@ sanchitsingh的答案等等。我想知道为什么会发生这种情况。
答案 0 :(得分:3)
只需检查代码中是否包含任何手势。这可能会导致问题。 我想你应该使用
button.enabled = NO;
button.userInteractionEnabled = NO;
答案 1 :(得分:3)
根据我的个人经验,来自this question以及其他人在网络上进行操作,似乎Apple关于UIControl.enabled的文档不正确,并且禁用设置UIControl并不会阻止它触及事件。它只能中和一些事件,例如(从内存中,现在无法检查)点击,触摸和当前动作触发 事件,所以你有效地必须使用UserInteractionEnabled属性来真正摆脱触摸事件。
答案 2 :(得分:1)
试试这个
button.userInteractionEnabled=NO;