Saya memiliki pandangan dengan UITapGestureRecognizer
. Jadi ketika saya mengetuk tampilan, tampilan lain muncul di atas tampilan ini. Tampilan baru ini memiliki tiga tombol. Ketika saya sekarang menekan salah satu tombol ini saya tidak mendapatkan tindakan tombol, saya hanya mendapatkan tindakan gerakan tap. Jadi saya tidak dapat menggunakan tombol-tombol ini lagi. Apa yang bisa saya lakukan untuk mendapatkan acara melalui tombol-tombol ini? Yang aneh adalah bahwa tombol masih disorot.
Saya tidak bisa menghapus UITapGestureRecognizer setelah saya menerima ketuknya. Karena dengan itu tampilan baru juga dapat dihapus. Berarti saya ingin perilaku seperti kontrol vide layar penuh .
void
sehingga tidak meninggalkan informasi apa pun saat runtime untuk digunakan untuk deteksi. Tetapi yang dapat Anda lakukan adalah menaiki hierarki tampilan, mengujiUIControl
, dan kembaliNO
jika Anda menemukan kontrol.Sebagai tindak lanjut dari tindak lanjut Casey untuk jawaban Kevin Ballard:
Ini pada dasarnya membuat semua jenis input pengguna kontrol seperti tombol, slider, dll berfungsi
sumber
setCancelsTouchesInView = NO
untuk tidak memicu gerakan tap pada interaksi dengan kontrol. Namun Anda dapat menulisnya dengan lebih baik:return ![touch.view isKindOfClass:[UIControl class]];
Temukan jawaban ini di sini: tautan
Anda juga bisa menggunakan
Yang mencegah pengenal ketuk menjadi satu-satunya yang menangkap semua ketukan
UPDATE - Michael menyebutkan tautan ke dokumentasi yang menggambarkan properti ini: cancelsTouchesInView
sumber
Sebagai tindak lanjut dari jawaban Kevin Ballard, saya memiliki masalah yang sama dan akhirnya menggunakan kode ini:
Ini memiliki efek yang sama tetapi ini akan bekerja pada setiap UIButton pada kedalaman tampilan apa pun (UIButton saya memiliki beberapa pandangan yang dalam dan delegasi UIGestureRecognizer tidak memiliki referensi untuk itu.)
sumber
Di iOS 6.0 dan yang lebih baru, tindakan kontrol default mencegah perilaku pengenalan isyarat yang tumpang tindih. Misalnya, tindakan default untuk sebuah tombol adalah satu ketukan. Jika Anda memiliki pengenal gerakan ketukan tunggal yang terpasang pada tampilan induk tombol, dan pengguna mengetuk tombol, maka metode tindakan tombol menerima acara sentuh alih-alih pengenal gerakan. Ini hanya berlaku untuk pengenalan gerakan yang tumpang tindih dengan tindakan default untuk kontrol, yang meliputi: .....
Dari dokumen API Apple
sumber
Jawaban-jawaban ini tidak lengkap. Saya harus membaca banyak posting tentang cara menggunakan operasi boolean ini.
Dalam file * .h Anda, tambahkan ini
Dalam file * .m Anda, tambahkan ini
sumber
Temukan cara lain untuk melakukannya dari sini . Ini mendeteksi sentuhan apakah di dalam setiap tombol atau tidak.
(1) pointInside: withEvent: (2) locationInView:
sumber
Inilah versi Swift dari jawaban Lily Ballard yang cocok untuk saya:
sumber
Cepat 5
Tombol superview dengan tapgesture
Dalam kasus saya menerapkan hitTest bekerja untuk saya. Saya memiliki tampilan koleksi dengan tombol
Metode ini melintasi hierarki tampilan dengan memanggil
point(inside:with:)
metode setiap subview untuk menentukan subview mana yang harus menerima acara sentuh. Jikapoint(inside:with:)
mengembalikan true, maka hierarki subview ini juga ditelusuri hingga tampilan paling depan yang berisi titik yang ditentukan ditemukan.sumber
Anda dapat menghentikan UITapGestureRecognizer dari membatalkan acara lain (seperti ketukan pada tombol Anda) dengan mengatur boolean berikut:
sumber
Jika skenario Anda seperti ini:
Anda memiliki tampilan sederhana dan beberapa UIButtons, kontrol UITextField ditambahkan sebagai subview ke tampilan itu. Sekarang Anda ingin mengabaikan keyboard ketika Anda menyentuh tempat lain pada tampilan kecuali pada kontrol (subview yang Anda tambahkan)
Maka Solusi adalah:
Tambahkan metode berikut ke XYZViewController.m Anda (yang memiliki pandangan Anda)
sumber
Mengoptimalkan jawaban cdasher, Anda dapatkan
sumber