Masalah saya: Saya memiliki superview EditView
yang pada dasarnya menempati seluruh bingkai aplikasi, dan subview MenuView
yang hanya menempati bagian bawah ~ 20%, dan kemudian MenuView
berisi subviewnya sendiri ButtonView
yang sebenarnya berada di luar MenuView
batas (seperti ini ButtonView.frame.origin.y = -100
:).
(catatan: EditView
memiliki subview lain yang bukan bagian dari MenuView
hierarki tampilan, tetapi dapat mempengaruhi jawabannya.)
Anda mungkin sudah tahu masalahnya: kapan ButtonView
berada dalam batas-batas MenuView
(atau, lebih khusus lagi, ketika sentuhan saya berada dalam MenuView
batas-batas), ButtonView
menanggapi peristiwa sentuh. Saat sentuhan saya berada di luar MenuView
batas (namun masih dalam ButtonView
batas), tidak ada peristiwa sentuhan yang diterima oleh ButtonView
.
Contoh:
- (E) adalah
EditView
, induk dari semua tampilan - (M) adalah
MenuView
, subview dari EditView - (B) adalah
ButtonView
, subview dari MenuView
Diagram:
+------------------------------+
|E |
| |
| |
| |
| |
|+-----+ |
||B | |
|+-----+ |
|+----------------------------+|
||M ||
|| ||
|+----------------------------+|
+------------------------------+
Karena (B) berada di luar bingkai (M), ketukan di wilayah (B) tidak akan pernah dikirim ke (M) - faktanya, (M) tidak pernah menganalisis sentuhan dalam kasus ini, dan sentuhan dikirim ke objek berikutnya dalam hierarki.
Sasaran: Saya menyimpulkan bahwa penimpaan hitTest:withEvent:
dapat menyelesaikan masalah ini, tetapi saya tidak mengerti persis bagaimana caranya. Dalam kasus saya, harus hitTest:withEvent:
diganti di EditView
(superview 'master' saya)? Atau haruskah diganti MenuView
, tampilan langsung tombol yang tidak menerima sentuhan? Atau apakah saya memikirkan hal ini dengan tidak benar?
Jika ini membutuhkan penjelasan yang panjang, sumber online yang bagus akan membantu - kecuali dokumen UIView Apple, yang belum menjelaskannya kepada saya.
Terima kasih!