2010-06-26 25 views
-1

UIView不處理它們的事件將它們傳遞給鏈。默認情況下,這將它們傳遞給它們的父視圖,並且如果沒有(最終)處理它們的父級UIViewController。修復UIScrollView傳遞鏈條而不是DOWN的事件

的UIScrollView打破這個(有很多的問題上SO,變化上的「爲什麼我的應用程序停止工作,一旦我添加一個UIScrollView?主題)

UISV確定該事件是否是爲自己,如果不是,它將它傳遞給它(它的子視圖);如果它們沒有處理這個事件,UISV就把它扔掉,這就是錯誤

在這種情況下,它應該把它們拋回到它自己的父視圖AFAICT,這就是爲什麼這麼多人會感到困惑:它不像記錄那樣工作(注意:由於觀點被記錄在案; UISV在這個問題上僅僅是「無證」的 - 它並沒有宣佈它在這種情況下的目標)。

所以......這個bug有沒有簡單的解決方法?有沒有我可以寫的一個類別,可以修復UISV 的一般,並避免我必須創建「虛假」​​的UIView子類,這些子類純粹是爲了捕獲事件並將它們交給他們應該去的地方? (這使得容易出錯的代碼)

特別是,從蘋果的文檔:

,即便是沒有位置的顯著變化時觸發,滾動視圖將跟蹤事件的內容的觸摸子視圖視圖。如果用戶在計時器過去之前拖動手指足夠遠,則滾動視圖取消子視圖中的任何跟蹤並執行滾動本身。

...如果我可以覆蓋,「如果計時器火災」的方法,並執行它正確,我相信我能解決我所有的UISV實例。

但是: - 蘋果會考慮這個「使用私有API」(他們的「私人」的描述是在正常的編程術語荒謬的,我不明白他們做什麼,不要被它的意思) - 有人知道這種方法是什麼,或者找到它的好方法嗎? (調試編譯ObjC類來查找符號名字,也許?)

回答

0

我已經找到了部分答案,這是正確的,但不是100%可用:(。

iPhone OS 4.0可以讓你遠程添加監聽器給定的視圖,通過UIGestureRecognizer類。這是偉大的,工作整齊。

唯一的問題是......它不會對任何3.x的iPhone手機合作和iPod Touch上。

(但如果你'瞄準4.0及以上,這是一個簡單的方法轉發)

編輯:

在OS 3.x中,我創建了一個具有額外屬性的自定義UIView子類:

NSObject *objectToDelegateToOnTouch; 
id touchSourceIdentifier; 

每當身體接觸中,視圖直接將觸控消息給objectToDelegateToOnTouch,但touchSourceIdentifier的額外參數。

這樣,無論何時您碰觸,您都知道它來自哪裏(您可以使用對象,字符串或任何您想要的作爲「標識符」)。

相關問題