Hapus dari array dalam tampilan tabel pada indeks yang dipilih

Saya mencoba menghapus baris dalam tampilan tabel yang saya presentasikan menggunakan berbagai objek. Saya telah menambahkan tombol hapus di sudut dan saat diklik, tombol tersebut akan menghapus baris yang dipilih, tetapi tombol tersebut selalu menghapus baris pertama, tidak peduli baris mana pun yang saya klik.

Saya mendeklarasikan variabel terlebih dahulu: private var indexForCell = Int() lalu saya menggunakan metode tampilan tabel didSelectRowAt seperti ini:

override func tableView(_ tableView: UITableView, didSelectRowAt indexPath: IndexPath) {
        indexForCell = indexPath.row
    }

Lalu saya menggunakan tombol yang saya tambahkan untuk dihapus:

    @IBAction func removePokemon(_ sender: UIButton) {
        favourites.remove(at: indexForCell)
        self.tableView.reloadData()
    }

Ini membuat baris tersebut terhapus tetapi selalu yang pertama. Baris mana pun yang saya pilih, baris pertama selalu dihapus. Bagaimana cara menghentikan ini?


person Sabih    schedule 01.09.2020    source sumber
comment
Lihat di sini bagaimana Anda dapat menghapus baris dalam tampilan tabel. stackoverflow.com/a/52818024/7905888   -  person A. Amini    schedule 01.09.2020
comment
Anda harus memperbarui pertanyaan Anda untuk memperjelas bahwa Anda memiliki tombol hapus di setiap sel tampilan tabel dan Anda ingin dapat mengetuk tombol itu dan menghapus sel tertentu. Jika demikian, pendekatan Anda untuk menyimpan indeks sel saat pengguna memilih sel tidak akan berfungsi, karena Anda dapat mengetuk tombol pada sel tanpa memilih sel terlebih dahulu.   -  person Duncan C    schedule 02.09.2020
comment
Saat memposting pertanyaan, Anda perlu menjelaskan situasinya dengan cukup detail sehingga pembaca Anda dapat memahaminya sepenuhnya. Pertanyaan Anda tidak jelas dan tidak lengkap seperti yang tertulis. Saya akan menunda untuk tidak memberikan suara, tetapi hal ini perlu perbaikan.   -  person Duncan C    schedule 02.09.2020


Jawaban (1)


Baris kode private var indexForCell = Int() adalah bug yang menunggu untuk terjadi. Int() memutuskan ke nol, yang merupakan baris pertama. Jadi, jika Anda tidak pernah memilih satu baris pun, ia akan mencoba menghapus baris pertama.

Jadikan variabel sebagai Opsional:

private var indexForCell = Int?

Kemudian tulis ulang fungsi hapus Anda:

@IBAction func removePokemon(_ sender: UIButton) {
    guard let indexToRemove = indexForCell else {
        print("No index selected")
        return
    }
    favourites.remove(at: indexToRemove)
    self.tableView.reloadData()
}

Namun Anda tidak memberi tahu kami apa yang dilakukan fungsi favourites.remove(at:) Anda, dan Anda juga tidak memberi tahu kami cara mengisi tampilan tabel Anda, sehingga sulit untuk mengetahui apakah ada masalah lain juga.

(BTW, ada cara yang lebih baik untuk menghapus satu sel daripada memuat ulang seluruh tampilan tabel, tapi mari fokus agar pendekatan Anda saat ini berfungsi untuk saat ini.)

Sunting:

Jika Anda memiliki tombol hapus di setiap sel yang ingin Anda hapus itemnya tanpa memilihnya, Anda memerlukan cara untuk mengetahui sel mana yang berisi tombol tersebut. Saya menulis ekstensi tampilan tabel yang memungkinkan Anda mengetahuinya. Lihat tautan ini: https://stackoverflow.com/a/42043277/205185

person Duncan C    schedule 01.09.2020
comment
Ini agak berhasil! setidaknya saya dapat menghapus baris apa pun sekarang, apa pun indeksnya, tetapi ada sedikit masalah. Saya harus memilih baris untuk menghapusnya. Ketika saya mengklik tombol yang saya buat di sel saya, tidak ada indeks yang dipilih yang dicetak tetapi ketika saya mengklik sel itu sendiri dan kemudian mengklik tombol itu kemudian menghapus sel tersebut. Saya harus memilih sel lalu klik tombol pada sel untuk menghapusnya. Saya ingin langsung menghapusnya dengan menekan tombol tanpa memilih baris - person Sabih; 01.09.2020
comment
Anda memiliki tombol hapus di setiap sel? Jika demikian, Anda perlu mencari tahu sel mana yang berisi tombol dalam kode tindakan Anda. Gunakan frame.origin tombol, yang dikonversi ke koordinat tampilan tabel, untuk mengetahui sel mana yang berisi tombol. Saya menulis ekstensi tampilan tabel yang memungkinkan Anda mengetahui jalur indeks mana yang berisi tampilan, dan telah mempostingnya di sini di SO. Saya akan mencoba mencarikan tautannya untuk Anda. - person Duncan C; 01.09.2020