如何防止在 UINavigationbar 上同时触摸按钮的双重动作?

Posted

技术标签:

【中文标题】如何防止在 UINavigationbar 上同时触摸按钮的双重动作?【英文标题】:How to prevent double action from simultaneous button touches on UINavigation bar? 【发布时间】:2015-11-04 22:21:19 【问题描述】:

在一个 UINavigation 栏中,有一个右侧的自定义共享 UIBarButtonItem 和一个返回按钮在左侧的 UIBarButtonItem。当同时点击两个按钮时,应用会产生黑色视图,这可能是因为两个按钮都试图同时显示一个新视图 - 共享按钮呈现一个 UIActivityViewController,而后退按钮呈现一个来自前一屏幕的 VC。

在这里查看类似问题时,我尝试了以下解决方案,但均未阻止同时触摸按钮时出现黑色视图:

    通过以下2种方式将exclusiveTouch插入ViewDidLoad

一) for(UIView *temp in self.navigationController.navigationBar.subviews) [temp setExclusiveTouch:YES];

b)[self.navigationController.navigationBar setExclusiveTouch:YES];

    触摸后应用self.navigationController.navigationBar.userInteractionEnabled = NO;

还有其他解决方案吗?

这和多线程有关吗?

【问题讨论】:

我遇到了同样的问题。你找到解决方案了吗? @angak 我认为我们所做的是在另一个按钮被触摸后专门禁用它。 【参考方案1】:

在每个触摸事件处理程序中,添加以下行:

[[UIApplication sharedApplication] beginIgnoringInteractionEvents];

处理程序完成后,执行以下操作:

[[UIApplication sharedApplication] endIgnoringInteractionEvents];

由您决定处理程序结束时要考虑什么。如果您正在推送或弹出视图控制器,则可以将第二行添加到相关视图控制器的 viewWillAppear 中。如果要显示模态视图控制器,则可以使用 -[UIViewController presentViewController:animated:completion:] 的完成处理程序。

【讨论】:

【参考方案2】:

在这种情况下,您可以使用 ExclusiveTouch 属性非常简单

[self.navigationController.navigationBar setExclusiveTouch:YES];

这是一个布尔值,指示接收器是否专门处理触摸事件。

将此属性设置为 YES 会导致接收器阻止将触摸事件传递到同一窗口中的其他视图。此属性的默认值为 NO。

【讨论】:

但尝试触摸导航栏按钮上方的状态栏。在这种情况下,导航栏按钮被按下。真奇怪。【参考方案3】:

如果您希望一次只有一个按钮响应触摸,则需要为该按钮设置exclusiveTouch,而不是为父视图设置。

在添加条形按钮项之后放置它。

for(UIView *temp in self.navigationController.navigationBar.subviews)

    [temp setExclusiveTouch:YES];

或者您可以在创建 UIBarButton 时为每个 UIBarButton 单独设置它们。

【讨论】:

感谢 PiyushSharma。这是我尝试的第一件事——忘记了——谢谢你提醒我。此外,UIBarButtons 没有 ExclusiveTouch 属性。 我在 swift 代码中做了同样的事情,但没有工作......你能告诉我怎么做......提前谢谢

以上是关于如何防止在 UINavigationbar 上同时触摸按钮的双重动作?的主要内容,如果未能解决你的问题,请参考以下文章

如何防止黑色背景出现在我的UINavigationBar中?

如何防止 UINavigationBar 在 iOS 7 中覆盖视图顶部?

防止 iOS 7 UINavigationBar 使用 UIAppearance 为 barTintColor 更改设置动画

防止 UISearchBarController 显示 UINavigationBar

防止自定义 UINavigationBar 元素在视图之间更改

如何在 UINavigationBar 上设置图像