【问题标题】:Disabled button still calls target禁用按钮仍然调用目标
【发布时间】:2012-04-27 05:34:28
【问题描述】:

我的应用程序中有一个系统设置,用户可以在其中捏合视图以将其扩展到全屏(如 Flipboard)。但是,当我这样做时,我想禁用一些在两种模式下都可见的按钮。通常它可以正常工作,但在以下边缘情况下会失败:

1) 非缩放模式下的按钮(不要松开)

2) 捏放大视图,等待它完成动画。然后按钮将其userInteractionEnabled 设置为NO

3) 释放按钮,无论如何都会调用目标函数。我在目标函数中放了一个断点并使用lldb检查按钮,userInteractionEnabled确实设置为NO

我期望禁用的按钮不应该触发其目标是错误的吗?我应该在目标函数中检查这个吗?

这是实际禁用按钮的功能,以防万一您想查看(edit:似乎有些混乱。下面的代码没有任何问题,我只是包括在内它是彻底的。)

//The function that disables the buttons
- (void)disableButtons:(SO2MenuButtons)buttons
{
    UIView *view = nil;
    if(buttons & SO2Mokuji)
    {
        view = [self.view viewWithTag:151];
        view.alpha = 0.5;
        view.userInteractionEnabled = NO;
    }
    if(buttons & SO2NoteView)
    {
        view = [self.view viewWithTag:152];
        view.alpha = 0.5;
        view.userInteractionEnabled = NO;
    }
    //etc, etc...
}

更新:

我把上面的改成这个结果还是一样

- (void)disableButtons:(SO2MenuButtons)buttons
{
    UIButton *view = nil;
    if(buttons & SO2Mokuji)
    {
        view = (UIButton *)[self.view viewWithTag:151];
        view.enabled = NO;
    }
    if(buttons & SO2NoteView)
    {
        view = (UIButton *)[self.view viewWithTag:152];
        view.enabled = NO;
    }
    //etc, etc...
}

编辑 看来我没有清楚地表达问题是什么,所以我整理了一个简单的项目来演示问题。您可以下载它here(取决于您阅读此消息的时间,之前的链接可能已过期)。问题是按钮在被禁用后仍在触发其目标方法。看了上面的页面后,我为使用 filedropper 道歉......我不知道这些天共享项目的流行方式是什么>_

【问题讨论】:

  • 你有什么问题,要启用按钮吗?
  • @Dinesh 我不希望它在我禁用它后触发目标方法。
  • 您的问题是在按钮禁用状态时触发目标方法..!
  • 你解决过这个问题吗?有一个类似的问题,一个禁用的按钮仍然触发hander。
  • 谢谢。是的,我看到了。寻找解决方案,而不是解决方法。

标签: ios cocoa-touch uibutton


【解决方案1】:

看起来您使用的是按位与运算符 &,而您想要的是逻辑与运算符 &&。

【讨论】:

  • 不,我想按位使用。 SO2MenuButtons 是一个位字段,它可以帮助我确定要禁用哪些按钮。
【解决方案2】:

我通过在这些按钮上将exclusiveTouch 设置为YES 找到了解决此问题的方法。这样用户就不能在按住按钮时捏住视图。当然,这并不能真正解决最初的问题,所以我暂时不接受这个答案。如果暂时没有人发布答案,我会接受这个答案。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-09-03
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-08-14
    • 2021-03-03
    相关资源
    最近更新 更多