2011-06-14 62 views
1

我無法讓我的UIButtonsUIScrollViews等,在這種情況下工作:UIResponder鏈所需的說明

我有基地UIViewController,這是UIWindow根控制器。 在這層之上,我添加了一些其他的UIViews,我將其稱爲「中間層視圖」。在頂部,我爲疊加對象添加了另一個UIView

定期爲不同視圖更改中間層視圖。它使用的UIView來自一個由NIB文件製作的UIViewController。這裏有一個例子

if (mode == eModeShowView1) 
    UIViewController* nextController = [[UIViewController alloc] initWithNibName:@"View1"... 
else if (mode == eModeShowView2) 
    UIViewController* nextController = [[UIViewController alloc] initWithNibName:@"View2"... 

[UIView insertSubview:nextController.view below:m_overlayView]; 

現在,當我觸摸屏幕上,第一響應者顯然是OverlayView或已經觸碰了OverlayView任何UIResponder。 觸摸輸入的UIEvent上升到視圖鏈,但似乎跳過了中間層視圖和UIResponders完全在該UIView。它直接跳到根UIViewController

有人知道這裏發生了什麼嗎?

難道可以通過某種方式創建兩個UIEvents?一個用於疊加視圖,另一個用於中間層視圖?那可能嗎?如果是這樣,怎麼樣?

任何幫助將不勝感激。 謝謝, 豐富

回答

0

EDIT1開始:

,你可以把一個UITapGestureRecognizer到m_overlayView和initWithTarget:你-middleview行動:一些法合middleview現在

,在你middleview你可以將recognizer.state識別爲UIGestureRecognizerStateBegan,Ended等並執行您想要執行的操作。

edit1 end:

您可以調試它。只需在所有控制器中使用touchesbegan中的日誌。通過記錄觸摸響應的順序將會清楚。

好的..所以這個從文檔描述的方法可能會回答你。你的m_overlayViewnextController.view是彼此相關的兄弟姐妹,而不是超級查看。所以你對他們任何一個的觸摸都不會被報告給其他人,而是向基地superview報告,這是兩個兄弟姐妹常見的superview

因此,你會發現中間層被繞過。其實你的中間層是兄弟姐妹,不再是超級景觀。希望至少給你提供一些方法;)

insertSubview:belowSubview: 

在視圖層次結構中的另一個視圖下插入一個視圖。

(void)insertSubview:(UIView *)view belowSubview:(UIView *)siblingSubview 

參數

view 

視圖插入下方的另一視圖。如果它不是siblingSubview的兄弟,它將從superview中刪除。

siblingSubview

同級視圖,這將是所插入的視圖上方。

討論

此方法保留視圖,並將其下一個應答器的接收器,這是它的新superview

視圖只能有一個超級視圖。如果視圖已經有superview且該視圖不是接收器,則在使接收器成爲新的superview之前,此方法將刪除先前的superview

+0

嗨。感謝您及時的回覆。我已經在我所有的ViewController中記錄了touchesBegan等。這就是我能夠發現它正在跳過我的中間層。我不知道爲什麼:s。 – 2011-06-14 11:20:35

+0

請通過我的更新回答 – 2011-06-14 12:02:16

+0

啊是的。這就是發生的事情。有誰知道我如何解決這個問題?我可以在覆蓋圖下插入中間圖層,然後將覆蓋圖的超級視圖設置爲中間圖層? – 2011-06-14 15:08:37