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

相關問題