Bagaimana cara menambahkan acara sentuh ke UIView?
Saya coba:
UIView *headerView = [[[UIView alloc] initWithFrame:CGRectMake(0, 0, tableView.bounds.size.width, nextY)] autorelease];
[headerView addTarget:self action:@selector(myEvent:) forControlEvents:UIControlEventTouchDown];
// ERROR MESSAGE: UIView may not respond to '-addTarget:action:forControlEvents:'
Saya tidak ingin membuat subclass dan menimpa
- (void)touchesBegan:(NSSet *)touches withEvent:(UIEvent *)event
Jawaban:
Di iOS 3.2 dan lebih tinggi, Anda dapat menggunakan pengenal isyarat. Misalnya, ini adalah cara Anda menangani acara tap:
Ada banyak gerakan bawaan juga. Lihat dokumen untuk penanganan acara iOS dan
UIGestureRecognizer
. Saya juga punya banyak kode contoh di github yang mungkin bisa membantu.sumber
CGPoint
mewakili lokasi ketukan di tampilan tampilan yang disadap. Anda dapat menggunakan titik ini untuk memindahkan tampilan yang diketuk (atau tampilan saudara) ke lokasi yang diketuk. Ini lebih bermanfaat dalam penanganUIPanGestureRecognizer
untuk menyeret tampilan di sekitar layar.Pengenal Gerakan
Ada sejumlah peristiwa sentuh (atau gerakan) yang umum digunakan yang dapat Anda beri tahu saat Anda menambahkan Gesture Recognizer ke tampilan Anda. Mereka mengikuti jenis gerakan didukung secara default:
UITapGestureRecognizer
Ketuk (menyentuh layar sebentar satu atau lebih kali)UILongPressGestureRecognizer
Sentuhan panjang (menyentuh layar untuk waktu yang lama)UIPanGestureRecognizer
Geser (gerakkan jari Anda melintasi layar)UISwipeGestureRecognizer
Geser (gerakkan jari dengan cepat)UIPinchGestureRecognizer
Jepit (gerakkan dua jari bersamaan atau terpisah - biasanya untuk memperbesar)UIRotationGestureRecognizer
Putar (menggerakkan dua jari dalam arah melingkar)Selain itu, Anda juga dapat membuat pengenal isyarat khusus sendiri.
Menambahkan Gerakan di Pembuat Antarmuka
Seret pengenal isyarat dari pustaka objek ke tampilan Anda.
Kendalikan kontrol dari gerakan di Outline Dokumen ke kode Pengontrol Tampilan Anda untuk membuat Outlet dan Tindakan.
Ini harus ditetapkan secara default, tetapi juga memastikan bahwa Tindakan Pengguna Diaktifkan disetel ke true untuk tampilan Anda.
Menambahkan Gerakan secara Programatis
Untuk menambahkan gerakan secara terprogram, Anda (1) membuat pengenal gerakan, (2) menambahkannya ke tampilan, dan (3) membuat metode yang disebut ketika gerakan dikenali.
Catatan
sender
parameter opsional. Jika Anda tidak perlu referensi ke isyarat maka Anda dapat meninggalkannya. Jika Anda melakukannya, hapus(sender:)
nama metode tindakan setelah.handleTap
metode ini sewenang-wenang. Beri nama apa pun yang ingin Anda gunakan .action: #selector(someMethodName(sender:))
Lebih banyak contoh
Anda dapat mempelajari pengenal isyarat yang saya tambahkan ke tampilan ini untuk melihat cara kerjanya.
Berikut adalah kode untuk proyek itu:
Catatan
sumber
UIView
Anda juga perlu menambahkan:self.isUserInteractionEnabled = true;
Saya pikir Anda cukup menggunakan
maksud saya headerView meluas dari UIControl.
sumber
UITapGestureRecognizer
bukan penggantiUIControlEventTouchDown
. ATap
biasanya terdiri dariUIControlEventTouchDown
danUIControlEventTouchUpInside
.UIView
bukan aUIControl
dan dengan demikian tidak memiliki akses keaddTarget:action:forControlEvents:
.Swift 3 & Swift 4
Menggunakan
sumber
Berdasarkan jawaban yang diterima Anda dapat mendefinisikan makro:
Makro ini menggunakan ARC, jadi tidak ada
release
panggilan.Contoh penggunaan makro:
sumber
Anda dapat mencapai ini dengan menambahkan Gesture Recogniser dalam kode Anda.
Langkah 1: ViewController.m:
Langkah 2: ViewController.m:
CATATAN: di sini yourView dalam kasus saya adalah
@property (strong, nonatomic) IBOutlet UIView *localView;
Sunting : * localView adalah kotak putih di Main.storyboard dari bawah
sumber
Di Swift 4.2 dan Xcode 10
Gunakan UITapGestureRecognizer untuk menambahkan acara sentuh
Jika Anda ingin menggunakan SharedClass
Saya memiliki 3 tampilan di ViewController saya bernama view1, view2 dan view3.
sumber
Inilah versi Swift:
sumber
BlockTap
?Swift 3:
sumber
Tampaknya cukup sederhana hari ini. Ini adalah versi Swift.
sumber
Ini adalah ios tapgesture; Pertama, Anda perlu membuat tindakan untuk GestureRecognizer setelah menulis kode di bawah ini di bawah tindakan seperti yang ditunjukkan di bawah ini
sumber
Cara lain adalah menambahkan tombol transparan ke tampilan
Dan kemudian, menangani klik:
sumber
Buat pengenal isyarat (subkelas), yang akan mengimplementasikan acara sentuh, seperti
touchesBegan
. Anda dapat menambahkannya ke tampilan setelah itu.Dengan cara ini Anda akan menggunakan komposisi alih-alih subklas (yang merupakan permintaan).
sumber
Mengapa kalian tidak mencoba SSEventListener ?
Anda tidak perlu membuat pengenal isyarat dan memisahkan logika Anda dengan metode lain.
SSEventListener
mendukung pengaturan blok pendengar pada tampilan untuk mendengarkan gerakan ketukan tunggal, gerakan ketuk ganda dan gerakan ketuk N jika Anda suka, dan gerakan tekan lama. Menyetel pendengar gerakan ketukan tunggal menjadi seperti ini:[view ss_addTapViewEventListener:^(UITapGestureRecognizer *recognizer) { ... } numberOfTapsRequired:1];
sumber
Tujuan-C:
Cepat:
Pertanyaannya adalah:
Itu tidak meminta acara tap .
Secara khusus OP ingin mengimplementasikan
UIControlEventTouchDown
Beralih
UIView
keUIControl
adalah jawaban yang tepat di sini karenaGesture Recognisers
tidak tahu apa-apa tentang.touchDown
,.touchUpInside
,.touchUpOutside
dllSelain itu, UIControl mewarisi dari UIView sehingga Anda tidak kehilangan fungsionalitas apa pun.
Jika semua yang Anda inginkan adalah sebuah ketukan, maka Anda dapat menggunakan Pengenal Gerakan. Tetapi jika Anda ingin kontrol yang lebih baik, seperti pertanyaan ini, Anda perlu UIControl.
https://developer.apple.com/documentation/uikit/uicontrol?language=objc https://developer.apple.com/documentation/uikit/uigesturerecognizer?language=objc
sumber