2011-06-20 132 views
2

我有UIView有3個子視圖,我需要處理觸摸superview和子視圖上的每一個觸摸,但子視圖攔截觸摸。我怎樣才能做到這一點? 謝謝。 UPD:那麼更簡單的方法不存在?事實上,除了繼承之外,更容易發現事件。處理父視圖觸摸

回答

2

你可以使用

[subView setUserinteractionEnabled: NO]; 

這樣,他們不會攔截觸摸的事件禁用自受理觸摸子視圖,它們將被髮送到僅父視圖。

如果您希望兩個視圖都能接收事件,您可以在子視圖中捕獲事件,然後手動將它們發送到父視圖。

+1

這實際上不是一個壞主意。 +1 –

+0

聽到關於如何最好地在子視圖中捕捉事件並將它們手動發送到父視圖的一些指導會很酷。 :] – weienw

2

你需要重寫觸摸事件在如下子視圖:

- (void)touchesBegan:(NSSet *)touches withEvent:(UIEvent *)event 
{ 
    [self.nextResponder touchesBegan: touches withEvent:event]; 
    [super touchesBegan: touches withEvent: event]; 
} 

- (void)touchesMoved:(NSSet *)touches withEvent:(UIEvent *)event 
{ 
    [self.nextResponder touchesMoved: touches withEvent:event]; 
    [super touchesMoved: touches withEvent: event]; 
} 

- (void)touchesEnded:(NSSet *)touches withEvent:(UIEvent *)event { 
    [self.nextResponder touchesEnded: touches withEvent:event]; 
    [super touchesEnded: touches withEvent: event]; 
} 
+0

我不知道你在做什麼,但我認爲每個電話只需要調用super和* not * sefl.nextResponder。查看' - (void)touches *:withEvent:'的文檔 – Olie