2012-10-04 188 views
0

我正在嘗試響應某些UIViews上的觸摸事件。這裏的視圖控制器看起來如何在IB:iOS - UIViews沒有響應觸摸事件

enter image description here

這裏的視圖層次:

enter image description here

我已經實現了所有四個 「觸動」 的方法如下:

- (void)touchesBegan:(NSSet *)touches withEvent:(UIEvent *)event{ 
    UITouch *touch = [touches anyObject]; 
    if(touch.view==locPhoneView){ 
     locPhoneView.backgroundColor=[ColorUtility colorWithHexString:@"83d3f0"]; 
    } 
    if(touch.view==locAddressView){ 
     locAddressView.backgroundColor=[ColorUtility colorWithHexString:@"83d3f0"]; 
    } 
} 

- (void)touchesEnded:(NSSet *)touches withEvent:(UIEvent *)event{ 
    UITouch *touch = [touches anyObject]; 
    if(touch.view==locPhoneView){ 
     locPhoneView.backgroundColor=[UIColor whiteColor]; 
    } 
    if(touch.view==locAddressView){ 
     locAddressView.backgroundColor=[UIColor whiteColor]; 
    } 

} 
- (void)touchesCancelled:(NSSet *)touches withEvent:(UIEvent *)event{ 

} 
- (void)touchesMoved:(NSSet *)touches withEvent:(UIEvent *)event{ 

} 

無論我在屏幕上觸摸什麼位置,都不會發送事件。我在「touchesBegan」開頭有一個斷點,而且這段代碼從未達到。

所有視圖都已選中「已啓用用戶交互」,並已正確連接到其網點。

我錯過了什麼?在我的項目中的其他地方,我正在做同樣的事情,它工作正常。

它可能與我的根視圖是UIScrollView這一事實有關嗎?

謝謝!

編輯:我遵循了下面的建議,並將子類別UIScrollView,以便接觸發送到NextResponder。看來,我現在正在接觸,但是,視圖的背景顏色實際上是否改變的行爲是不正確的。

例如,如果我快速點擊視圖,「觸摸」方法會觸發,但背景顏色不會更改。但是,如果我點按並保持大約一秒鐘,背景顏色會根據我的預期改變。任何想法可能會導致這種奇怪的行爲?

編輯:添加一行:

[scrollView setDelaysContentTouches:NO]; 

我viewDidLoad方法解決了這個問題對我來說。謝謝你的幫助!

回答

1

你是對的,你的問題是你的意見被放置在一個UIScrollView中。滾動視圖獲取所有觸摸事件並且不會將它們傳遞給子視圖。

你可以爲這個問題的解決方案: