ios - 禁用按钮仍然调用目标

标签 ios cocoa-touch uibutton

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

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

2) 捏合 View 以放大,并等待其完成动画。然后,该按钮将其 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 表示歉意...我不知道现在共享项目的流行方式是什么>_<。不要点击绿色的大下载按钮,点击显示“下载此文件”的按钮

最佳答案

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

关于ios - 禁用按钮仍然调用目标,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10345266/

相关文章:

iphone - 如何在圆圈内对齐 UIButtons?

ios - Swift 无法将 JSON 字符串存储为日期

ios - ManagedObjectContext 保存在内存中,但不在磁盘上

objective-c - 对于 Cocoa 开发人员来说,计算机科学研究中最有值(value)的部分是什么?

ios - NSMutableDictionary 访问和销毁的线程安全

iphone - 如何从通过 MKAnnotationView 添加的按钮获取点击事件

iOS Twitter 反向 OAuth

ios - @supports 指令如何在 Safari iOS 中工作

ios - 保留发送到释放的 UIViewController

objective-c - 如何使用 UISilder 在 SubView 中添加和删除 UIButtons?