2011-03-01 92 views
4

我在我的視圖控制器視圖中有一個工作的UIButton。傳遞觸摸事件

我有一個UIView實例在按鈕(我將它稱爲topView)在同一個視圖控制器的視圖。如果滿足條件,我將所有觸摸事件(開始,移動,結束,取消)轉發給視圖的nextResponder。

但是當條件觸發時,按鈕沒有收到事件。如果我移動topView,使其不在按鈕上方,該按鈕將工作(或將userInteractionEnabled屬性設置爲false)。如果topView位於按鈕上方,則該按鈕不起作用。太令人沮喪了,因爲我可以看到視圖下的按鈕!

我是否必須在視圖控制器中執行任何操作以接收將它們發送到下一個響應者的觸摸事件?

我已經閱讀了所有我可以在響應鏈上看到的文檔,但我仍然有點困惑。

+0

所以,我剛剛確認我的視圖控制器正在接收我發送給nextResponder的轉發觸摸消息。 但視圖控制器視圖中的按鈕沒有。我必須做什麼才能將事件傳遞給視圖控制器視圖中的按鈕? – 2011-03-01 04:04:21

回答

6

視圖的nextResponder是其視圖控制器或其超視圖。您的設置中的UIButton既不是,所以它不會收到事件。

在這種情況下,您應該重寫pointInside:withEvent:以返回NO,而不是將事件轉發到下一個響應者。這樣系統就會像你的觀點那樣行事,甚至不存在。根據文檔,您也可以在視圖上將userInteractionEnabled設置爲NO,以獲得相同的效果。

+0

我無法將userInteractionEnabled設置爲NO,因爲我的視圖的某些部分必須響應觸摸。我必須在我的topView透明的地方通過觸摸,但出於設計原因,視圖必須是全屏幕,其覆蓋較低的UI元素,例如我的按鈕。 Overide pointInside:withEvent在我的UIButton或topView中? – 2011-03-01 04:21:56

+0

酷!重寫pointInside:withEvent:在topView完全工作!太感謝了!猜猜這是我試圖努力的一個例子! – 2011-03-01 08:20:31

+0

p.s.試圖投票你的答案,但顯然我太菜鳥了! – 2011-03-01 08:21:26