iOS:防止通过禁用的工具栏按钮点击

Posted

技术标签:

【中文标题】iOS:防止通过禁用的工具栏按钮点击【英文标题】:iOS: Prevent tapping through a disabled toolbar button 【发布时间】:2013-09-23 17:48:33 【问题描述】:

我正在使用 ios SDK 6 和 7。我有一个 UIToolbar 覆盖另一个视图(称为“视图 B”),它具有用于处理点击的 touches* 消息处理程序。当然,工具栏充满了 UIBarButtonItems。当启用工具栏按钮项目时,当我点击它或拖动它时,视图 B 会收到 no 触摸消息,这就是所需的效果。但是当一个按钮项被禁用时,点击或拖动它会向下“通过”工具栏(实际上)向下方的视图 B 发送一条消息。

我如何确保在工具栏上的点击不会传递到底层视图,即使点击发生在禁用的栏按钮项目上?

【问题讨论】:

【参考方案1】:

我仍然觉得这是一种相当不直观的行为,但解决方法相当简单。例如,touchesBegan 事件传递了一个touches NSSet,通常使用它来考虑要处理的触摸。这里的问题是底层视图将接收一组触摸,其中包括不属于它的触摸并且它不应该处理。因此,而不是:

- (void)touchesBegan:(NSSet *)touches withEvent:(UIEvent *)event

    for (UITouch* touch in touches)
    
        ...
    

...使用...

- (void)touchesBegan:(NSSet *)touches withEvent:(UIEvent *)event

    NSSet* myTouches = [event touchesForView: self];

    for (UITouch* touch in myTouches)
    
        ...
    

...因此忽略 SDK 提供的触摸并仅使用与“视图 B”本身相关的触摸。

【讨论】:

【参考方案2】:

如果您已经在视图 B 中手动处理触摸事件,只需检查触摸事件的点击点是否在禁用按钮的框架内。如果是这样,请忽略它。

【讨论】:

以上是关于iOS:防止通过禁用的工具栏按钮点击的主要内容,如果未能解决你的问题,请参考以下文章

仅工具提示 CSS:焦点和悬停可防止访问以下按钮

在执行自定义 segue 之前禁用工具栏 UIBarButtonItem

如何禁用 UIToolbar 灵活空间项点击

当数据表为空时,我们如何禁用数据表导出按钮(或防止点击事件)?

点击“返回”按钮时禁用浏览器表单输入预填充/自动填充功能

vue router拦截器防止重复点击