2017-02-02 49 views
0

我有一個包含兩個子視圖一個觀點:對的UIPageViewControllerisExclusiveTouch不工作的一個自定義的UIView

我想避免用戶能夠觸摸酒吧和瀏覽量在頂部做了一個自定義視圖的酒吧同一時間(酒吧控制頁面視圖,並在同一時間觸摸它們可能會導致崩潰)

我所做的是將欄視圖isExclusiveTouch屬性設置爲true。

override func awakeFromNib() { 
    [...] 
    isExclusiveTouch = true 
} 

documentation說,如果一個視圖isExclusiveTouch屬性被設置爲在同一窗口真的,其他的觀點應該無法接收任何觸摸事件。但是,我可以觸摸並滾動頁面視圖,同時觸摸欄。

在另一個屏幕上,我有多個由自定義視圖組成的交換機,我想避免多個交換機同時觸摸,因此我也將它們的isExclusiveTouch設置爲true,但仍然可以同時觸摸其中的兩個。

我想念isExclusiveTouch根本不工作?

回答

0

我可以做這項工作: 我加我吧前面的透明視圖,設置它的isExclusiveTouch爲true。

所以我的欄現在就是這個樣子

barView -|- subview 1 
     |- subview 2 
     |- [...] 
     |- front view (transparent view for exclusive touch) <- new 

isExclusiveTouch上barView是行不通的,但使用它的正面圖一樣。

我也可以使用相同的解決方案使它適用於我的交換機。

1

exclusiveTouch僅在 時間段內禁止在其他視圖中觸摸,而這些觸摸在專屬觸摸視圖中有一個活動的觸摸。也就是說,如果 您將手指放在專屬觸摸視圖中,觸摸將不會在其他視圖中啓動 ,直到您擡起第一根手指。如果在exclusiveTouch視圖中當前沒有觸摸 ,則它不會阻止從其他視圖開始觸摸 。

要真正使這個觀點在屏幕上唯一可接收 觸動你需要以添加另一種觀點認爲在一切 其他的頂部搭上觸摸的其餘部分,或者某個地方的子類的圖 您的層次結構(或您的UIWindow本身)並覆蓋 hitTest:withEvent:在文本視圖可見時始終返回文本視圖, 或在文本視圖中返回零。

Source

+0

是的,那是我想要的套餐。 我不應該在觸摸欄時觸摸頁面視圖,但應該能夠在不觸摸欄的情況下與界面視圖進行交互。 問題是我可以在觸摸欄時與頁面視圖進行交互。 – Luinily

+0

@Lininily我認爲你誤解了,在這裏檢查答案,他解釋了它是如何工作的:http://stackoverflow.com/questions/843338/why-doesnt-uiview-exclusivetouch-work「它指出,獨家觸摸屬性不影響觸及視野的框架之外。「 –

+0

我的鏈接中的文檔示例說的是相反的.. 它們有兩個不同的視圖(A和B),A的isExclusiveTouch設置爲true。B不在A的框架中,但在它的下面 」if用戶在視圖A內部握住一個手指並且也在視圖B內部接觸,則視圖B不接收該觸摸,因爲視圖A是唯一的視圖跟蹤觸摸。「 我仍然會再次閱讀您的鏈接並嘗試查看我可以得到文檔所說的常數 – Luinily