2012-10-10 84 views

回答

3

touchesBegan方法必須處理父視圖的框架。如果該框架對於父視圖不可見並且完全被subviews包圍,則父視圖將不會接收到觸摸。

0

這樣做:Why isn't my UIViewController in the responder chain for its view?

簡而言之:

  • 將您的意見,您的控制器。
  • 這個屬性添加名爲屬性nextResponderPlusSomething(已經有一個nextResponder)視圖中這是越來越觸及
  • viewdidload集控制器(個體經營)
  • touchesBegan內部的調用添加到nextResponderPlusSomething:touchesBegan
  • 在控制器上實現此事件,將事件發送到您想要調用的視圖。
1

您還可以設置:

[theViewThatIsCoveringParent setUserInteractionEnabled:NO]; 

這樣,所有觸摸將被父被抓。

+0

這對我沒有幫助。 – Siamaster

11

其實有一種方法可以覆蓋此行爲。您需要延長卡住父視圖中的每個子對象和覆蓋touchesBegan方法是這樣的:

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

舉例來說,如果你有一個UIButton一個UIScrollView這是一個UIView內內,那麼你需要創建兩個自定義類。一個擴展UIButton和其他擴展的UIScrollView。在每個這些自定義類中,您都需要添加上面的方法定義。在這些更改之後,您將能夠在父UIView中收到touchesBegan事件。

相關問題