Benim sorun: Bir Superview var EditViewtemelde tüm uygulama çerçevesini kaplıyor ve bir subview MenuViewsadece alt ~% 20 kadar sürer ve sonra MenuViewkendi subview içeren ButtonViewaslında dışında bulunduğu MenuViewbireyin sınırları (böyle bir şey: ButtonView.frame.origin.y = -100).
(not: görünüm hiyerarşisinin bir EditViewparçası olmayan MenuView, ancak yanıtı etkileyebilecek başka alt görünümlere sahiptir .)
Muhtemelen sorunu zaten biliyorsunuzdur: ne zaman ButtonViewsınırları dahilinde olduğunda MenuView(veya daha spesifik olarak, dokunuşlarım MenuViewsınırlar içinde olduğunda ), ButtonViewdokunma olaylarına yanıt verir. Dokunuşlarım MenuViewsınırlarının dışında (ancak yine de ButtonViewsınırları içinde) olduğunda, dokunma olayı almıyor ButtonView.
Misal:
- (E),
EditViewtüm görünümlerin ebeveynidir - (M),
MenuViewEditView'ın bir alt görünümüdür - (B)
ButtonViewMenuView'un bir alt görünümüdür
Diyagram:
+------------------------------+
|E |
| |
| |
| |
| |
|+-----+ |
||B | |
|+-----+ |
|+----------------------------+|
||M ||
|| ||
|+----------------------------+|
+------------------------------+
(B), (M) çerçevesinin dışında olduğu için, (B) bölgesindeki bir dokunma asla (M) 'ye gönderilmez - aslında, (M) bu durumda dokunuşu asla analiz etmez ve dokunma hiyerarşideki bir sonraki nesne.
Amaç: Üstesinden gelmenin hitTest:withEvent:bu sorunu çözebileceğini anlıyorum, ancak tam olarak nasıl olduğunu anlamıyorum. Benim durumumda, hitTest:withEvent:geçersiz EditViewkılınmalı ('ana' denetimim)? Yoksa MenuViewdokunuşları almayan düğmenin doğrudan denetiminde geçersiz kılınmalı mı? Yoksa bunu yanlış mı düşünüyorum?
Bu, uzun bir açıklama gerektiriyorsa, Apple'ın UIView belgeleri dışında iyi bir çevrimiçi kaynak yardımcı olacaktır, ancak bunu bana netleştirmemişti.
Teşekkürler!