ปัญหาของฉัน:ฉันได้ SuperView EditViewที่เกิดขึ้นโดยทั่วไปกรอบโปรแกรมทั้งหมดและ subview MenuViewซึ่งใช้เวลาเพียงด้านล่าง ~ 20% แล้วMenuViewมี subview ของตัวเองButtonViewซึ่งอันที่จริงอาศัยอยู่นอกMenuView's ขอบเขต (บางอย่างเช่นนี้ButtonView.frame.origin.y = -100)
(หมายเหตุ: EditViewมีMenuViewมุมมองย่อยอื่น ๆ ที่ไม่ได้เป็นส่วนหนึ่งของลำดับชั้นการดู แต่อาจส่งผลต่อคำตอบ)
คุณอาจทราบปัญหาแล้ว: เมื่อButtonViewใดที่อยู่ในขอบเขตของMenuView(หรือโดยเฉพาะอย่างยิ่งเมื่อการสัมผัสของฉันอยู่ในMenuViewขอบเขต) ButtonViewตอบสนองต่อเหตุการณ์การสัมผัส เมื่อสัมผัสของฉันอยู่นอกMenuViewขอบเขตของ (แต่ยังอยู่ในButtonViewขอบเขตของ) จะไม่ได้รับเหตุการณ์สัมผัสใดButtonViewๆ
ตัวอย่าง:
- (E) คือพาเรน
EditViewต์ของมุมมองทั้งหมด - (M) คือ
MenuViewมุมมองย่อยของ EditView - (B) คือ
ButtonViewมุมมองย่อยของ MenuView
แผนภาพ:
+------------------------------+
|E |
| |
| |
| |
| |
|+-----+ |
||B | |
|+-----+ |
|+----------------------------+|
||M ||
|| ||
|+----------------------------+|
+------------------------------+
เนื่องจาก (B) อยู่นอกเฟรมของ (M) การแตะในพื้นที่ (B) จะไม่ถูกส่งไปที่ (M) - อันที่จริง (M) จะไม่วิเคราะห์การสัมผัสในกรณีนี้และระบบจะส่งการสัมผัสไปที่ วัตถุถัดไปในลำดับชั้น
เป้าหมาย:ฉันรวบรวมว่าการลบล้างhitTest:withEvent:สามารถแก้ปัญหานี้ได้ แต่ฉันไม่เข้าใจว่าจะทำอย่างไร ในกรณีของฉันควรhitTest:withEvent:จะแทนที่ในEditView(superview 'master' ของฉัน) หรือไม่ หรือควรจะลบล้างในMenuViewsuperview โดยตรงของปุ่มที่ไม่ได้รับการสัมผัส? หรือฉันคิดเรื่องนี้ไม่ถูกต้อง?
หากต้องการคำอธิบายที่ยาวแหล่งข้อมูลออนไลน์ที่ดีจะเป็นประโยชน์ยกเว้นเอกสาร UIView ของ Apple ซึ่งยังไม่ชัดเจนสำหรับฉัน
ขอบคุณ!