2011-05-31 49 views
0

我試圖實現一個UIResponder對象,它將允許我記錄屏幕活動,然後將事件傳遞給下一個響應者,以允許應用程序正常進行。我一直在研究這一點,並且看到兩種應該起作用的方法:創建一個根視圖並忽略放置在它上面的子視圖中的接觸,允許根視圖處理它們;或者創建一個添加到所有子視圖的GestureRecognizer。我的應用程序有多個視圖,可以在主窗口中進行交換。UIResponder和事件傳遞的另一個問題

我已經嘗試了兩種方法並最終陷入了同樣的僵局:我在視圖(或識別器)中獲得了touchesBegan/touchesMoved/touchesEnded事件,但是當我將它們發送給響應者鏈時沒有任何反應。我已經嘗試了以下所有內容。請注意,「視圖」是從touch.view衍生和view.superview是我的「loginView」對象,其中包含被竊聽讓我在這裏按鈕:

[view hitTest:frame.origin withEvent:event]; 
[view touchesBegan:touches withEvent:event]; 
[view.superview hitTest:frame.origin withEvent:event]; 
[view.superview touchesBegan:touches withEvent:event]; 
[[view nextResponder] touchesBegan:touches withEvent:event]; 
[[view nextResponder] hitTest:frame.origin withEvent:event]; 
[[[view superview] nextResponder] touchesBegan:touches withEvent:event]; 
[[view superview] hitTest:frame.origin withEvent:event]; 

這些工作都沒有,而事實上「 [[view nextResponder] hitTest ...'產生警告。

我試過resignFirstResponder,甚至會嘗試一個sendAction,但我只是在這個時候抓住吸管。我已經嘗試將我的觀點放在鏈條的底部和頂部,並獲得相同的結果。顯然我錯過了一些東西,但我看不到什麼。

任何人都可以給我一個線索,接下來要做什麼?

- 山姆

回答

0

我真的不知道到底是什麼,你是一個試圖做的,但也許http://iphonedevelopment.blogspot.com/2008/10/bit-about-responder-chain.html幫助你。

就個人而言,我在做什麼的UIView子類來繞過接觸是這樣的:

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

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

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

謝謝,但是這就是我試過,它仍然不適合我的工作。事件永遠不會傳遞給下一個響應器。所有的例子都讓我看起來像我的工作,但事實並非如此。我的底層觀點與IBActions和Outlets綁定的事實與我們有什麼關係?我攔截按鈕並試圖使底層視圖的按鈕作出反應;它不是。我「消費」了touchesBegan事件(儘管我不想),並且沒有更進一步。 – YosemiteSam 2011-06-01 18:58:52

+0

好吧,我接近了一點:我已經確定發送touchesBegin到一個UIButton對象似乎不會導致它觸發UIControlEventTouchUpInside事件。如果該事件未觸發,則與該按鈕關聯的回調不會觸發。因此,對於我的應用程序中的每個對象,我想監視我需要調用適當的「火災」事件?這似乎很快樂。 – YosemiteSam 2011-06-02 17:23:20

相關問題