Saya ingin menangani pers yang panjang pada a UITableViewCell
untuk mencetak "menu akses cepat". Apakah seseorang sudah melakukan ini?
Terutama gerakan yang dikenali UITableView
?
Saya ingin menangani pers yang panjang pada a UITableViewCell
untuk mencetak "menu akses cepat". Apakah seseorang sudah melakukan ini?
Terutama gerakan yang dikenali UITableView
?
Pertama-tama tambahkan pengenal isyarat pers yang panjang ke tampilan tabel:
UILongPressGestureRecognizer *lpgr = [[UILongPressGestureRecognizer alloc]
initWithTarget:self action:@selector(handleLongPress:)];
lpgr.minimumPressDuration = 2.0; //seconds
lpgr.delegate = self;
[self.myTableView addGestureRecognizer:lpgr];
[lpgr release];
Kemudian pada penangan isyarat:
-(void)handleLongPress:(UILongPressGestureRecognizer *)gestureRecognizer
{
CGPoint p = [gestureRecognizer locationInView:self.myTableView];
NSIndexPath *indexPath = [self.myTableView indexPathForRowAtPoint:p];
if (indexPath == nil) {
NSLog(@"long press on table view but not on a row");
} else if (gestureRecognizer.state == UIGestureRecognizerStateBegan) {
NSLog(@"long press on table view at row %ld", indexPath.row);
} else {
NSLog(@"gestureRecognizer.state = %ld", gestureRecognizer.state);
}
}
Anda harus berhati-hati dengan ini sehingga tidak mengganggu ketukan normal pengguna sel dan juga mencatat yang handleLongPress
mungkin menyala beberapa kali (ini akan disebabkan oleh perubahan status pengenalan isyarat).
if (gestureRecognizer.state == UIGestureRecognizerStateBegan) ...
.UITableView
, bukanUITableViewCell
...)Saya telah menggunakan jawaban Anna-Karenina, dan itu bekerja hampir hebat dengan bug yang sangat serius.
Jika Anda menggunakan bagian, menekan lama judul bagian akan memberi Anda hasil yang salah dengan menekan baris pertama pada bagian itu, saya telah menambahkan versi tetap di bawah ini (termasuk pemfilteran panggilan tiruan berdasarkan status gerakan, per Saran Anna-Karenina).
sumber
Answer in Swift 5 (Lanjutan dari jawaban Ricky di Swift)
sumber
Ini adalah instruksi yang diklarifikasi yang menggabungkan jawaban Dawn Song dan jawaban Marmor.
Seret Recognizer Gerakan Tekan lama dan letakkan di Table Cell Anda. Ini akan melompat ke bagian bawah daftar di sebelah kiri.
Kemudian hubungkan pengenal gesture dengan cara yang sama seperti Anda menghubungkan tombol.
Tambahkan kode dari Marmor di penangan tindakan
}
sumber
Tampaknya lebih efisien untuk menambahkan pengenal langsung ke sel seperti yang ditunjukkan di sini:
Ketuk & Tahan untuk Sel TableView, Lalu dan Sekarang
(gulir ke contoh di bagian bawah)
sumber
Jawab di Swift:
Tambahkan delegasi
UIGestureRecognizerDelegate
ke UITableViewController Anda.Dalam UITableViewController:
Dan fungsinya:
sumber
Saya mengumpulkan sedikit kategori tentang UITableView berdasarkan jawaban Anna Karenina yang luar biasa.
Seperti ini, Anda akan memiliki metode delegasi yang nyaman seperti yang biasa Anda lakukan ketika berhadapan dengan tampilan tabel biasa. Saksikan berikut ini:
Jika Anda ingin menggunakan ini dalam UITableViewController, Anda mungkin perlu subkelas dan menyesuaikan dengan protokol baru.
Ini sangat bagus untuk saya, semoga membantu orang lain!
sumber
Swift 3 menjawab, menggunakan sintaksis modern, memasukkan jawaban lain, dan menghilangkan kode yang tidak dibutuhkan.
sumber
Cukup tambahkan UILongPressGestureRecognizer ke sel prototipe yang diberikan di storyboard, lalu tarik gerakan ke file .m viewController's .m untuk membuat metode tindakan. Saya membuatnya seperti yang saya katakan.
sumber
Gunakan properti cap waktu UITouch dalam sentuhan. Mulai untuk meluncurkan timer atau menghentikannya ketika disentuh.
sumber