0

在UINavigation栏中,右侧的自定义共享UIBarButtonItem和左侧的UIBarButtonItem中的后退按钮。当同时点击两个按钮时,应用程序会产生一个黑色视图,可能是因为两个按钮都试图同时显示一个新视图 - 共享按钮显示一个UIActivityViewController,后一个按钮显示前一个屏幕的VC。如何防止在UINavigation栏上同时触摸按钮的双重动作?

在通过类似的问题在这里看,我已经试过了以下解决方案,但没有出现在同步的按钮触摸防止黑看法:

  1. 插入exclusiveTouch到viewDidLoad中在以下2种方式

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

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

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

还有其他解决方案吗?

这与多线程有关吗?

+0

我遇到同样的问题。你有没有找到解决方案? – angak

+0

@angak我认为我们所做的是在一个人被触摸后专门禁用另一个按钮。 – Edan

回答

0

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

把这个放在你添加你的酒吧按钮项目之后。

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

,或者你可以为每个UIBarButton单独设置exclusiveTouch在建立它们。

+1

感谢PiyushSharma。这是我第一次尝试 - 忘了它 - 感谢提醒我。另外,UIBarButtons没有exclusiveTouch属性。 – Edan

+0

我在swift代码中做了同样的事情,但没有工作......你能告诉我如何做到这一点......预先感谢 –

1

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

[[UIApplication sharedApplication] beginIgnoringInteractionEvents]; 

当处理程序完成后,执行以下命令:

[[UIApplication sharedApplication] endIgnoringInteractionEvents]; 

这是给你找出什么考虑处理程序的结尾。如果您推送或弹出视图控制器,则可以将第二行添加到相关视图控制器的viewWillAppear。如果您正在显示模式视图控制器,则可以使用-[UIViewController presentViewController:animated:completion:]的完成处理程序。

1

差不多简单,你可以使用使用ExclusiveTouch财产在这种情况下

[self.navigationController.navigationBar setExclusiveTouch:YES];

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

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

+0

但尝试触摸导航栏按钮上方的状态栏。在这种情况下,导航栏按钮被按下。真奇怪。 – sabiland

相关问题