我瞭解你正在尋找的期望行爲Joey - 我還沒有在API中找到支持這種自動消息傳遞的兄弟姐妹視圖的鏈式行爲。
我最初在下面寫的是關於只通知父母UIView關於觸摸。這仍然適用,但我相信你需要更進一步,並讓父UIView使用命中測試技術,塞爾吉奧在它的每個子視圖上描述覆蓋層的兄弟,並讓父UIView手動調用「do它的每個子視圖都通過了命中測試。這些同級視圖中的每一個都可以返回布爾值,以確定是否要中止通知其他同級或繼續鏈。
如果你發現自己使用這種模式很多,可以考慮在UIView上添加一個類別方法,它封裝了命中測試並要求視圖執行一個選擇器。
我原來的答覆
手工工作的一點點,就可以連接到一起這個自己。我必須這樣做,並且它對我很有用,因爲我有一個經常重複的用例(一個按鈕上的覆蓋視圖),創建一些自定義類是有意義的。如果你的情況相似,其中一種技術就足夠了。
選項1: 如果覆蓋不需要做任何事情,但看起來很漂亮,有它退出觸摸與userInteractionEnabled = NO
完全處理的。這將使觸摸事件轉到它的父UIView(它是覆蓋層)。
選項2: 有覆蓋吸收觸摸事件(因爲它會默認設置),然後調用上的指示觸摸或特定手勢被認定父UIView的一個方法,這裏是它是什麼。這樣,疊加層後面的UIView仍然會對觸摸識別起作用,即使其他人進行了攔截。
使用選項2,它更適合於簡單的UIControlEvent
類型,如UIControlEventTouchDown
和UIControlEventTouchUpInside
。在我的情況下(一個定製的UIButton
子類,在它上面有一個自定義的覆蓋視圖),我會觸摸並觸摸按鈕上的事件爲兩個單獨的方法。如果在按鈕本身發生觸摸或觸發內部事件,則會觸發這些事件。但是,如果我需要模擬發生按鈕按下,它們也是我可以從覆蓋視圖調用的鉤子。
根據您的需求,你可以有覆蓋層之間的已知協議和它的父UIView的或只是有覆蓋非正式測試的UIView,具有respondsToSelector:
檢查就可以調用performSelector:
與要叫那會自定義方法之前如果UIView沒有覆蓋,它會自動觸發。