Bagaimana cara mendapatkan tombol hapus untuk ditampilkan saat menggesek pada UITableViewCell
? Acara tidak pernah dinaikkan dan tombol hapus tidak pernah muncul.
ios
uitableview
cocoa-touch
uikit
Pembelajar
sumber
sumber
UITableViewCell
s.Jawaban:
Saat startup di
(-viewDidLoad or in storyboard)
lakukan:Override untuk mendukung pengeditan bersyarat dari tampilan tabel. Ini hanya perlu diterapkan jika Anda akan kembali
NO
untuk beberapa item. Secara default, semua item dapat diedit.sumber
self.tableView.allowsMultipleSelectionDuringEditing = NO;
agar menggesek-kiri untuk bekerja. Ini kedengarannya seperti bug bagi saya karena tabel TIDAK dalam kondisi pengeditan. Opsi ini seharusnya hanya berlaku "DuringEditing". Namun, itu berfungsi sekarang dan saya mengaturnya ke YA setiap kali tabel memasuki kondisi pengeditan.Jawaban ini telah diperbarui ke Swift 3
Saya selalu berpikir itu baik untuk memiliki contoh yang sangat sederhana, mandiri sehingga tidak ada yang dianggap ketika saya belajar tugas baru. Jawaban ini adalah untuk menghapus
UITableView
baris. Proyek melakukan seperti ini:Proyek ini didasarkan pada contoh UITableView untuk Swift .
Tambahkan Kode
Buat proyek baru dan ganti kode ViewController.swift dengan yang berikut ini.
Metode kunci tunggal dalam kode di atas yang memungkinkan penghapusan baris adalah yang terakhir. Sekali lagi ini untuk penekanan:
Storyboard
Tambahkan
UITableView
ke View Controller di storyboard. Gunakan tata letak otomatis untuk menyematkan keempat sisi tampilan tabel ke tepi View Controller. Kendalikan kontrol dari tampilan tabel di storyboard ke@IBOutlet var tableView: UITableView!
baris dalam kode.Jadi
Itu saja. Anda seharusnya dapat menjalankan aplikasi Anda sekarang dan menghapus baris dengan menggesek ke kiri dan mengetuk "Hapus".
Variasi
Ubah teks tombol "Hapus"
Tambahkan metode berikut:
Tindakan tombol kustom
Tambahkan metode berikut.
Perhatikan bahwa ini hanya tersedia dari iOS 8. Lihat jawaban ini untuk detail lebih lanjut.
Diperbarui untuk iOS 11
Tindakan dapat ditempatkan memimpin atau mengekstraksi sel menggunakan metode yang ditambahkan ke API UITableViewDelegate di iOS 11.
Bacaan lebih lanjut
sumber
UITableView
satu , ini adalah benar-benar berdiri proyek sendiri dan Anda tidak perlu melakukan apa-apa yang tidak dijelaskan di sini. Alasan saya mulai mengaturnya dalam kode adalah karena itu membutuhkan lebih sedikit penjelasan dalam jawaban saya. Saya harus kembali dan mengedit contoh dasar untuk menggunakan kode juga.Kode ini menunjukkan bagaimana menerapkan penghapusan.
Secara opsional, di inisialisasi inride Anda, tambahkan baris di bawah ini untuk menampilkan item tombol Edit:
sumber
Saya memiliki masalah yang baru saja berhasil saya selesaikan sehingga saya membaginya karena dapat membantu seseorang.
Saya memiliki UITableView dan menambahkan metode yang ditampilkan untuk mengaktifkan swipe untuk menghapus:
Saya sedang mengerjakan pembaruan yang memungkinkan saya untuk menempatkan tabel ke mode edit dan memungkinkan multiselect. Untuk melakukan itu saya menambahkan kode dari sampel TableMultiSelect Apple . Setelah saya berhasil, saya menemukan bahwa swipe saya fungsi delete telah berhenti berfungsi.
Ternyata menambahkan baris berikut ke viewDidLoad adalah masalahnya:
Dengan baris ini, multiselect akan berfungsi tetapi gesekan untuk menghapus tidak akan. Tanpa garis itu sebaliknya.
Cara mengatasinya:
Tambahkan metode berikut ke viewController Anda:
Kemudian dalam metode Anda yang menempatkan tabel ke mode pengeditan (dari tombol tekan misalnya) Anda harus menggunakan:
dari pada:
Ini berarti multiselect hanya diaktifkan ketika tabel dalam mode pengeditan.
sumber
Di bawah UITableViewDataSource akan membantu Anda untuk menghapus usapan
arrYears adalah NSMutableArray dan kemudian memuat kembali tableView
Cepat
sumber
Di iOS 8 dan Swift 2.0 silakan coba ini,
sumber
@ Kurbz jawabannya luar biasa, tetapi saya ingin meninggalkan catatan ini dan berharap jawaban ini dapat menghemat waktu.
Saya kadang-kadang memiliki garis-garis ini di controller saya, dan mereka membuat fitur swiping tidak berfungsi.
Jika Anda menggunakan
UITableViewCellEditingStyleInsert
atauUITableViewCellEditingStyleNone
sebagai gaya pengeditan, maka fitur swiping tidak berfungsi. Anda hanya dapat menggunakanUITableViewCellEditingStyleDelete
, yang merupakan gaya default.sumber
Cepat 4
sumber
Juga, ini dapat dicapai dalam SWIFT menggunakan metode sebagai berikut
sumber
Cepat 3
Yang harus Anda lakukan adalah mengaktifkan dua fungsi ini:
sumber
Saya tahu ini adalah pertanyaan lama, tetapi jawaban @Kurbz hanya membutuhkan ini untuk Xcode 6.3.2 dan SDK 8.3
Saya perlu menambahkan
[tableView beginUpdates]
dan[tableView endUpdates]
(terima kasih ke @ bay.phillips di sini )sumber
Ketika Anda menghapus sel tampilan tabel Anda, Anda juga harus menghapus objek array Anda di indeks x.
Saya pikir Anda dapat menghapusnya dengan menggunakan gerakan menggesek. Tampilan tabel akan memanggil Delegasi:
Setelah menghapus objek. Anda harus memuat ulang penggunaan tampilan tabel. Tambahkan baris berikut dalam kode Anda:
setelah itu, Anda berhasil menghapus baris. Dan ketika Anda memuat ulang tampilan atau menambahkan data ke DataSource objek tidak akan ada lagi.
Untuk semua yang lain adalah jawaban dari Kurbz benar.
Saya hanya ingin mengingatkan Anda bahwa fungsi delegasi tidak akan cukup jika Anda ingin menghapus objek dari array DataSource.
Saya harap saya telah membantu Anda.
sumber
[tableView reloadData]
panggilan[tableView deleteRowsAtIndexPaths:@[indexPath] withRowAnimation:UITableViewRowAnimationAutomatic]
.sumber
Swift 2.2:
sumber
Untuk Swift, Cukup tulis kode ini
Untuk Objective C, Cukup tulis kode ini
sumber
untuk kode swift4, pertama-tama aktifkan pengeditan:
maka Anda menambahkan tindakan hapus ke delegasi edit:
sumber
Cepat 4,5
Untuk menghapus sel di swipe ada dua metode UITableView.Write dibangun metode ini dalam ekstensi TableView dataSource.
sumber
Jika Anda mengadopsi sumber data difabel, Anda harus memindahkan delegasi panggilan balik ke
UITableViewDiffableDataSource
subkelas. Sebagai contoh:sumber