禁用按钮仍然调用目标

时间:2012-04-27 05:34:28

标签: ios cocoa-touch uibutton

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

1)按钮处于非缩放模式(不释放)

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

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

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

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

//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道歉...我不知道分享项目的流行方式是这些天> _<。不要单击绿色的大绿色下载按钮,单击“下载此文件”

2 个答案:

答案 0 :(得分:1)

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

答案 1 :(得分:1)

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