2014-02-19 83 views
1

我有一個視圖控制器,它包含一個滾動視圖,它佔用了整個可用的窗口。有一個UIView作爲容器視圖使用,它是scrollview的子視圖,幷包含所有其他視圖和控件。當視圖控制器初始化時,有很多配置會根據Web服務的數據來顯示哪些視圖和控件。iOS按鈕嵌套在視圖中沒有接收到觸摸

附加到視圖控制器的主視圖是一個輕擊手勢識別器。我發現我需要檢查[觸摸視圖]以查看它是否是按鈕或我不希望手勢識別器解釋的任何其他控件,並且將一個NO值從

  • (BOOL)gestureRecognizer:(UIGestureRecognizer *)gestureRecognizer shouldReceiveTouch:(UITouch *)觸摸,如果它是這些控制的一次

委託方法。

所以在這個容器視圖是另一個(UIView)子視圖,並在該子視圖中是一個按鈕。視圖控制器是導航控制器堆棧的一部分,並且當這僅作爲導航控制器呈現時,它們都可以很好地工作。

當導航控制器顯示在標籤欄的一個標籤上時,那麼當我點擊按鈕時,它不會識別該按鈕上的輕擊。當我在上面的委託方法中斷時,[touch view]是UIView,而不是UIButton。

如果我按住按鈕一秒左右,那麼它確實識別按鈕,並將消息轉發到按鈕。

對此有何看法?我可以發佈代碼,只是不知道要發佈什麼...

+0

找到它。容器視圖具有靈活的高度自動調整掩碼集,因此由於選項卡欄而被設置爲較小的高度。 – mickm

回答

4

也許按鈕超出其包含視圖的範圍?如果沒有設置clipsToBounds,該按鈕仍然會出現,但由於它超出了其超視圖範圍,因此它不會響應觸摸。

另一種可能性是另一個視圖重疊按鈕。如果重疊視圖具有透明背景,您將無法看到重疊的位置,但它可能會從其下面的視圖中竊取觸摸事件。

任何時候我有很多嵌套視圖,我發現最簡單的方法來看看發生了什麼是暫時將每個視圖的backgroundColor設置爲不同的顏色。通過這種方式,我可以準確地看到每個視圖的界限,它們是如何嵌套的,以及什麼是重疊的。

+0

是的,你明白了。看到我上面的評論... – mickm

+0

在我的情況下,這是第一個案件。多謝兄弟。從2Hrs開始抓頭了。我完全忘了clipToBounds的事情。 :) – PrafulD

相關問題