Saya sedang mengerjakan proyek di mana saya harus memilih ulang sel tertentu.
Saya dapat memilih ulang sel menggunakan -willDisplayCell
, tetapi saya tidak dapat membatalkan pilihan ketika pengguna mengklik sel lain.
- (void)tableView:(UITableView*)tableView
willDisplayCell:(UITableViewCell*)cell
forRowAtIndexPath:(NSIndexPath*)indexPath
{
AppDelegate_iPad *appDelegte =
(AppDelegate_iPad *)[[UIApplication sharedApplication] delegate];
if ([appDelegte.indexPathDelegate row] == [indexPath row])
{
[cell setSelected:YES];
}
}
- (void)tableView:(UITableView *)tableView
didSelectRowAtIndexPath:(NSIndexPath *)indexPath {
AppDelegate_iPad *appDelegte =
(AppDelegate_iPad *)[[UIApplication sharedApplication] delegate];
NSIndexPath *indexpath1 = appDelegte.indexPathDelegate;
appDelegte.indexPathDelegate = indexPath;
[materialTable deselectRowAtIndexPath:indexpath1 animated:NO];
}
Bisakah kamu menolong?
Jawaban:
gunakan kode ini
Swift 3.0:
sumber
willSelectRowAt:
. Lihat jawaban yang lebih lengkap di sini: stackoverflow.com/questions/12693402/…Gunakan metode berikut dalam delegasi tampilan tabel
didSelectRowAtIndexpath
(Atau dari mana saja)sumber
indexPathForSelectedRow
ini adalah metode dan bukan properti.[myTable indexPathForSelectedRow]
. Saya mengulang-ulang sel sebelumnya. Terima kasih!Coba ini:
sumber
Mungkin bermanfaat untuk membuat ekstensi di Swift untuk ini.
Swift 4 dan Swift 5:
Ekstensi cepat (mis. Dalam file UITableViewExtension.swift):
Gunakan misalnya:
sumber
viewWillAppear()
metode membantu pengguna untuk memahami dari mana ia kembali.Silakan periksa dengan metode delegasi apakah itu benar atau tidak. Sebagai contoh;
untuk
sumber
Swift 4:
sumber
Ini adalah solusi untuk Swift 4
tambahkan saja
itu bekerja seperti pesona
contoh:
sumber
Selain mengatur sel seperti yang dipilih, Anda juga perlu memberi tahu tableView bahwa sel dipilih. Tambahkan panggilan ke metode
-tableView:selectRowAtIndexPath:animated:scrollPosition:
AndawillDisplayCell:
: dan Anda akan dapat membatalkan pilihan seperti biasa.Pastikan untuk menggunakan UITableViewScrollPositionNone untuk menghindari perilaku gulir yang aneh.
sumber
[cell setSelected:YES]
bisa dihilangkan:selectRowAtIndexPath
akan mengurus selselected
negaraIni seharusnya bekerja:
Pastikan materialTable dan tableView menunjuk ke objek yang sama.
Apakah materi terhubung ke tableView di Interface Builder?
sumber
Berdasarkan solusi saikiran, saya telah menulis ini, yang membantu saya. Pada file .m:
Dan pada file header:
Saya juga tidak terlalu berpengalaman, jadi periksa kebocoran memori dll.
sumber
Jika Anda ingin memilih sel tabel apa pun dengan klik pertama dan membatalkan pilihan dengan yang kedua, Anda harus menggunakan kode ini:
sumber
Swift 4:
sumber
self.tableView(tableView, didDeselectRowAt: indexPath)
setelahtableView.deselectRow...
karena tidak dipanggil secara otomatisSwift 2.0:
sumber
coba ini
sumber
tempatkan kode ini sesuai dengan kode Anda dan Anda akan mendapatkan sel Anda terpilih.
sumber
Bisakah kamu mencoba ini?
Ini berhasil untuk saya.
sumber
Swift 3.0:
Mengikuti bagian kepatuhan protokol dari panduan gaya swift ray wenderlich , untuk menjaga metode terkait dikelompokkan bersama, letakkan ekstensi ini di bawah kelas view controller Anda seperti itu:
sumber
Cepat
sumber
sumber
Cepat 3
Saya juga mengalami ini - ketika Anda menavigasi atau bersantai kembali ke tampilan tabel biasanya tidak membatalkan pilihan baris yang sebelumnya dipilih untuk Anda. Saya menempatkan kode ini di pengontrol tampilan tabel & berfungsi dengan baik:
sumber
Cepat 3/4
Di ViewController:
Di Sel Kustom:
sumber
cepat 3.0
sumber
Untuk membatalkan pilihan (DidDeselectRowAt) diaktifkan ketika diklik pertama kali karena data yang dimuat; Anda perlu memberi tahu tableView bahwa baris sudah dipilih untuk memulai, sehingga klik awal kemudian membatalkan pilihan baris:
// Swift 3:
sumber
Apa yang saya temukan adalah bahwa di atas pengaturan sel sebagai yang dipilih , Anda harus membiarkan tampilan tabel tahu untuk memilih baris di jalur indeks yang diberikan.
sumber