2010-07-26 75 views
0

我有一個UIViewController和一個與它關聯的UIView。 UIView有許多子視圖。iPhone:處理觸摸透明

如何處理觸摸事件在我的UIViewController子類指定的矩形內?

這個處理應該是透明的:的UIView和它的子視圖仍然應該接受他們的觸摸事件,即使它們相交指定的矩形。

P.S.

  1. 覆蓋觸動開始在視圖 控制器不起作用。內部視圖 不會傳遞事件。
  2. 添加自定義 按鈕的UIView子視圖 列表的末尾也不起作用。內部 子視圖未收到觸摸 事件。

回答

0

touchesBegan/touchesMoved/touchesEnded可能是要走的路。取決於你正在嘗試做什麼,UIGestureRecognizer也可能是一個選項。

爲了確保子視圖傳遞活動後,userInteractionEnabled爲YES的子視圖集。

UIView的默認設置爲yes,但一些子類(特別的UILabel)覆蓋這個並將其設置爲NO。

+0

可以UILabel有子視圖嗎?或者這只是爲了確保它不包括背後的東西? – jasongetsdown 2010-07-26 20:33:00

+0

我從來沒有做過,但我沒有看到任何UILabel無法擁有子視圖的原因。至於原因。 。 。誰知道?通常,人們並不認爲標籤是接收觸摸事件的東西,但有時很方便。 – 2010-07-26 20:55:36

0

僅僅因爲視圖默認情況下不會傳遞事件並不一定意味着它是必須的。

您可以繼承您正在使用的視圖,並讓它們將事件傳遞到視圖控制器上。

另一個想法是在所有的視圖之上實際上有一個透明的處理程序。也就是說,有一個透明的UIView,它位於你的視圖之上,處理觸摸事件,但也傳遞它們。我不知道這是否在實踐中有效,但聽起來像是這樣。

0

您的看法,及其控制器可以處理使用的touchesBegan,touchesEnded或touchesMoved觸摸。作爲一個例子,你可以選擇將事件傳遞給響應者鏈中的下一個響應者 。通過這種方式,您的每個視圖都有機會根據觸摸事件進行操作。

- (void)touchesBegan:(NSSet *)touches withEvent:(UIEvent *)event 
{ 
    //do something here and then pass the event on 
    [self.nextResponder touchesBegan:touches withEvent:event]; 
}