2013-10-22 24 views
0

我剛剛開始學習iOS GUI後,一般在最後幾周後端的東西和Objective-C的學習。我已經偶然發現了一個我已經設法解決的棘手的情況,但我想知道是否有更好的方法來解決它。UIView上UIBiew背後的兩個其他UIViews反應觸及上述視圖

這裏是我是如何分層我的UIViews:

[self.view.layer insertSublayer:_topView.layer above:self.view.layer]; 
[self.view.layer insertSublayer:_bottomView.layer above:self.view.layer]; 

所以我有「基地」視圖和單一視圖控制器。在這個視圖中,我有兩個子視圖:topView和bottomView。我已經能夠像我想要的那樣操縱這些視圖的來源,但即使它們位於我的UIButton面前,它也會觸摸。

我解決了這個問題,通過檢查其中一個子視圖的起點的y軸(無論哪一個)來確保該按鈕被顯示並因此激活它(或啓用用戶交互)。

if (_topView.frame.origin.y == 0) { 
    self.refreshButton.userInteractionEnabled = NO; 
} else { 
    self.refreshButton.userInteractionEnabled = YES; 
} 

我個人不喜歡這種解決方案,並想知道有什麼更好的辦法來解決,這是。

任何人都可以指向正確的方向,這樣我就可以讓這個圖層業務在這裏和那裏不被醜陋的黑客入侵嗎?

我正在使用Xcode 5.0的故事板。

乾杯!

+1

不要覺得這是一個破解,這是一個完美的方式來完成你想要做的事情。只要感覺冗長冗長,你的另一種選擇將會受到打擊 - 測試視圖並處理NSSet觸摸,這看起來好像比你在這裏做的事更有效。 –

回答

1

插入子層完全不影響觸摸轉發。視圖的子視圖(在你的情況下是一個按鈕)只能通過在其上添加子視圖來「覆蓋」。如果您沒有特別的理由使用CALayer,那麼只需添加子視圖,然後它會以正確的方式處理觸摸。像這樣:

[self.view insertSubview:_topView aboveSubview:self.refreshButton]; 
[self.view insertSubview:_bottomView aboveSubview:self.refreshButton]; 
+0

您仍然需要選擇性地啓用和禁用用戶與子視圖的交互。由於某種原因,我假定你需要子圖層,但在層次結構中堆疊視圖會更常見。無論哪種方式,userInteractionEnabled是要走的路。 –

+0

問題在於該按鈕確實對觸摸做出了反應,這在子視圖中不會發生,因爲默認情況下它們的'userInteractionEnabled'設置爲YES。子視圖和子圖層之間的區別正是用戶交互處理 - 圖層不處理它,子視圖也是如此。 – burax

+0

當我下班回家時,我會放棄這一點。謝謝! – parski

相關問題