Saya mencoba menambahkan 2 UITapGestureRecognizers
ke tampilan, satu untuk ketukan tunggal dan satu untuk acara ketuk ganda. Pengenal satu ketuk berfungsi seperti yang diharapkan (sendiri). Tapi sepertinya saya tidak bisa mengaktifkan pengenal ketuk ganda.
Telah mencoba bereksperimen dengan sifat seperti: cancelsTouchesInView
, delaysTouchesBegan
dan delaysTouchesEnded
tapi masih tidak bekerja.
Saat saya ketuk dua kali, pengenal satu ketukan akan selalu diaktifkan dan acara ketuk ganda juga akan dikirim ke tampilan super. Tetapi pengenal double tap kustom sepertinya tidak diberi tahu sama sekali.
Dokumentasi tampaknya menunjukkan bahwa 3 properti yang disebutkan di atas dapat digunakan untuk tujuan tersebut. Tapi saya tidak yakin nilai apa yang harus ditetapkan dan di mana pengenal (tunggal, ganda atau keduanya). Semoga seseorang yang akrab dengan ini bisa membantu.
Berikut ini adalah blok kode terbaru yang diperbarui.
// ****** gesture recognizers ******
- (void)addSingleAndDoubleTapGestureRecognizersToView:(UIView *)view
{
// single tap
UITapGestureRecognizer *singleTapRecognizer = [[UITapGestureRecognizer alloc] initWithTarget: tableViewController action: @selector(handleSingleTapOnView:)];
[singleTapRecognizer setNumberOfTouchesRequired:1];
[view addGestureRecognizer: singleTapRecognizer];
// double tap
UITapGestureRecognizer *doubleTapRecognizer = [[UITapGestureRecognizer alloc] initWithTarget: tableViewController action: @selector (handleDoubleTapOnView:)];
[doubleTapRecognizer setNumberOfTouchesRequired:2];
[singleTapRecognizer requireGestureRecognizerToFail: doubleTapRecognizer];
[view addGestureRecognizer: doubleTapRecognizer];
}
- (void)handleSingleTapOnView:(id)sender
{
}
- (void)handleDoubleTapOnView:(id)sender
{
}
Jawaban:
Catatan: Jika Anda menggunakannya
numberOfTouchesRequired
harus.numberOfTouchesRequired = 1;
Untuk Swift
sumber
Solusi Swift 3:
Pada baris kode, singleTap.require (toFail: doubleTap), kami memaksa ketukan tunggal untuk menunggu dan memastikan bahwa acara ketukan bukan ketuk ganda.
sumber
Anda perlu menggunakan metode requireGestureRecognizerToFail:. Sesuatu seperti ini:
[singleTapRecognizer requireGestureRecognizerToFail:doubleTapRecognizer];
sumber
// ---- pertama Anda harus mengalokasikan gerakan ketuk ganda dan tunggal ------- //
// ----------------------- jumlah ketukan ---------------- //
// ------- tambahkan ketuk ganda dan gerakan ketuk tunggal pada tampilan atau tombol -------- //
sumber
Tidak yakin apakah itu yang Anda cari, tapi saya melakukan tap tunggal / ganda tanpa pengenal isyarat. Saya menggunakannya dalam UITableView, jadi saya menggunakan kode itu dalam metode didSelectRowAtIndexPath
Metode singleTap dan doubleTap hanya batal dengan NSIndexPath sebagai parameter:
Semoga ini bisa membantu
sumber
Solusi untuk Swift 2:
sumber
Saya menerapkan metode UIGestureRecognizerDelegate untuk mendeteksi singleTap dan doubleTap.
Lakukan saja ini.
Kemudian terapkan metode delegasi ini.
sumber
Beberapa tampilan memiliki pengenalan tap ganda yang sudah ada (
MKMapView
menjadi contoh). Untuk menyiasatinya, Anda perlu menerapkanUIGestureRecognizerDelegate
metodeshouldRecognizeSimultaneouslyWithGestureRecognizer
dan mengembalikanYES
:Pertama, implementasikan pengenal ganda dan tunggal Anda:
Dan kemudian implementasikan:
sumber
Mengacu pada komentar @ stanley -
Jangan coba-coba dan gunakan gerakan ketuk untuk memilih pilihan untuk bekerja
UITableView
karena sudah memiliki penanganan ketukan penuh ....Tetapi Anda harus mengatur 'Cancels Touches in View' ke 'NO' pada pengenal gerakan ketukan tunggal Anda atau tidak akan pernah mendapatkan acara ketukan.
sumber