Ketika Anda mengetuk baris dalam UITableView
, baris disorot dan dipilih. Apakah mungkin untuk menonaktifkan ini sehingga mengetuk baris tidak menghasilkan apa-apa?
ios
uitableview
cocoa-touch
DavidM
sumber
sumber
selection
, dan tentu sajahighlighting
dinonaktifkan dengan itu. Banyak jawaban pilihan menjelaskan bagaimanadisable selection
dan tidak mengatasi penonaktifanhighlighting
. Untuk menonaktifkan hanya menyoroti gunakancell.selectionStyle = .None
atau pergi kestoryboard / cell / Selection = None
Jawaban:
Bagi saya, berikut ini berfungsi dengan baik:
Ini berarti
didSelectRowAt#
tidak akan berfungsi. Artinya, menyentuh deretan meja, dengan demikian, tidak akan melakukan apa pun. (Dan karenanya, jelas, tidak akan pernah ada animasi yang dipilih.)(Perhatikan bahwa jika, pada sel, Anda memiliki
UIButton
atau kontrol lain, tentu saja kontrol tersebut akan tetap berfungsi. Kontrol apa pun yang Anda miliki di sel tabel, sama sekali tidak terkait dengan kemampuan UITableView untuk memungkinkan Anda "memilih satu baris" menggunakandidSelectRowAt#
.)Hal lain yang perlu diperhatikan adalah: Ini tidak berfungsi ketika
UITableView
sedang dalam mode pengeditan. Untuk membatasi pemilihan sel dalam mode pengeditan, gunakan kode seperti di bawah ini:sumber
selectionStyle
properti di sel:cell.selectionStyle = UITableViewCellSelectionStyle.None
di Swift, ataucell.selectionStyle = UITableViewCellSelectionStyleNone
di Objective-C.tableView.allowSelection = false
tableViewDidSelectRowAtIndexPath
memanggilnya,cell.selectionStyle = .None
diinginkan. Jika Anda tidak ingin atau peduli dengan fungsi delegasi yang dipanggil (yaitu memiliki textfield di tableViewCell) pengaturantableView.allowsSelection = false
baik-baik saja.Yang harus Anda lakukan adalah mengatur gaya seleksi pada
UITableViewCell
instance menggunakan salah satu:Tujuan-C:
atau
Swift 2:
Swift 3 dan 4.x:
Lebih jauh, pastikan Anda tidak menerapkan
-tableView:didSelectRowAtIndexPath:
dalam delegasi tampilan tabel Anda atau secara eksplisit mengecualikan sel yang ingin Anda tidak memiliki tindakan jika Anda menerapkannya.Info lebih lanjut di sini dan di sini
sumber
Karena saya telah membaca posting ini baru-baru ini dan itu telah membantu saya, saya ingin memposting jawaban lain untuk menggabungkan semua jawaban (untuk anak cucu).
Jadi, sebenarnya ada 5 jawaban berbeda tergantung pada logika dan / atau hasil yang Anda inginkan:
1. Untuk menonaktifkan penyorotan biru tanpa mengubah interaksi sel lainnya:
Saya menggunakan ini ketika saya memiliki UIButton - atau beberapa kontrol lainnya - dihosting di UITableViewCell dan saya ingin pengguna dapat berinteraksi dengan kontrol tetapi tidak dengan sel itu sendiri.
CATATAN : Seperti yang dicatat oleh Tony Million di atas, ini TIDAK mencegah
tableView:didSelectRowAtIndexPath:
. Saya menyiasatinya dengan pernyataan "jika" sederhana, paling sering menguji bagian tersebut dan menghindari tindakan untuk bagian tertentu.Cara lain yang saya pikirkan untuk menguji ketukan sel seperti ini adalah:
2.Untuk melakukan ini untuk seluruh tabel, Anda dapat menerapkan solusi di atas untuk setiap sel dalam tabel, tetapi Anda juga dapat melakukan ini:
Dalam pengujian saya, ini masih memungkinkan kontrol di dalam
UITableViewCell
menjadi interaktif.3.Untuk membuat sel "read-only", Anda cukup melakukan ini:
4.Untuk membuat seluruh tabel "hanya-baca"
5.Untuk menentukan dengan segera apakah akan menyorot sel (yang menurut jawaban ini secara tersirat mencakup seleksi), Anda dapat menerapkan
UITableViewDelegate
metode protokol berikut :sumber
tableView:shouldHighlightRowAtIndexPath:
, yang umumnya (tidak selalu) pendekatan pilihan saya.Singkatnya, apa yang saya yakini adalah jawaban yang benar berdasarkan pengalaman saya sendiri dalam mengimplementasikan ini:
Jika Anda ingin menonaktifkan seleksi untuk beberapa sel saja, gunakan:
Selain mencegah seleksi, ini juga menghentikan tableView: didSelectRowAtIndexPath: dipanggil untuk sel yang telah disetel. (Penghargaan untuk Tony Million untuk jawaban ini, terima kasih!)
Jika Anda memiliki tombol di sel yang perlu diklik, Anda harus:
dan Anda juga harus mengabaikan klik apa pun di sel
- (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath
.Jika Anda ingin menonaktifkan pilihan untuk seluruh tabel, gunakan:
(Penghargaan untuk Paulo De Barros, terima kasih!)
sumber
Pada iOS 6.0,
UITableViewDelegate
telahtableView:shouldHighlightRowAtIndexPath:
. (Baca tentang itu di Dokumentasi iOS .)Metode ini memungkinkan Anda menandai baris tertentu sebagai tidak dapat disorot (dan secara implisit, tidak dapat dipilih) tanpa harus mengubah gaya pemilihan sel, mengacaukan penanganan acara sel dengan
userInteractionEnabled = NO
, atau teknik lain yang didokumentasikan di sini.sumber
Anda juga dapat menonaktifkan pemilihan baris dari pembuat antarmuka itu sendiri dengan memilih
NoSelection
dariselection
opsi (Properti UITableView) di panel inspektur seperti yang ditunjukkan pada gambar di bawah inisumber
SOLUSI TETAP UNTUK SWIFT 3
sumber
Dalam Anda
UITableViewCell
's XIB di Atribut nilai Inspektur setSelection
keNone
.sumber
Jika Anda ingin pilihan hanya flash, tidak tetap dalam kondisi yang dipilih, Anda dapat memanggil, masuk
pengikut
sehingga akan mem-flash status yang dipilih dan kembali.
sumber
Jika ada yang membutuhkan jawaban untuk Swift :
sumber
Inilah yang saya gunakan, dalam
cellForRowAtIndexPath
menulis kode ini .:sumber
Dari
UITableViewDelegate
Protokol Anda dapat menggunakan metodewillSelectRowAtIndexPath
danreturn nil
jika Anda tidak ingin baris dipilih.Dengan cara yang sama Anda dapat menggunakan
willDeselectRowAtIndexPath
metode ini danreturn nil
jika Anda tidak ingin barisnya dibatalkan.sumber
1- Yang harus Anda lakukan adalah mengatur gaya seleksi pada
UITableViewCell
instance menggunakan salah satu:Tujuan-C:
atau
Swift 2:
Swift 3:
2 - Jangan menerapkan -
tableView:didSelectRowAtIndexPath:
dalam tampilan tabel Andadelegate
atau secara eksplisit mengecualikan sel yang ingin Anda tidak memiliki tindakan jika Anda menerapkannya.3 - Selanjutnya, Anda juga dapat melakukannya dari storyboard. Klik sel tampilan tabel dan di inspektur atribut di bawah Table View Cell, ubah drop down di sebelah Selection menjadi None.
4 - Anda dapat menonaktifkan sorotan sel tabel menggunakan kode di bawah ini di (iOS) Xcode 9, Swift 4.0
sumber
Tujuan-C:
Di bawah cuplikan nonaktifkan penyorotan tetapi juga menonaktifkan panggilan ke
didSelectRowAtIndexPath
. Jadi jika Anda tidak menerapkandidSelectRowAtIndexPath
maka gunakan metode di bawah ini. Ini harus ditambahkan ketika Anda membuat tabel. Ini akan bekerja pada tombol danUITextField
di dalam sel.Di bawah cuplikan penonaktifan penonaktifan dan tidak menonaktifkan panggilan ke
didSelectRowAtIndexPath
. Setel gaya pemilihan sel ke Tidak ada dicellForRowAtIndexPath
Cuplikan di bawah ini menonaktifkan semua yang ada di sel. Ini akan menonaktifkan interaksi untuk
buttons
,textfields
:Cepat:
Di bawah ini adalah
Swift
setara denganObjective-C
solusi di atas :Penggantian Solusi Pertama
Penggantian Solusi Kedua
Penggantian Solusi Ketiga
sumber
Coba ketik:
Ini akan membatalkan pilihan baris Anda saat dibutuhkan.
Di Swift3 ...
sumber
Saya telah berjuang dengan ini cukup banyak juga, memiliki kontrol dalam
UITableViewCell
melarang penggunaanuserInteractionEnabled
properti. Saya memiliki tabel statis 3 sel untuk pengaturan, 2 dengan tanggal, 1 dengan sakelar hidup / mati. Setelah bermain-main di Storyboard / IB saya sudah berhasil membuat bagian bawah tidak dapat dipilih, tetapi ketika Anda mengetuknya pilihan dari salah satu baris atas menghilang. Ini adalah gambar WIP dari pengaturan saya UITableView:Jika Anda mengetuk baris 3 tidak terjadi apa-apa, pilihan akan tetap di baris kedua. Fungsionalitas ini secara praktis merupakan salinan dari layar pemilihan waktu tambahan acara aplikasi Apple.
Kode ini secara mengejutkan kompatibel, hingga iOS2 = /:
Ini bekerja bersamaan dengan mengatur gaya pemilihan ke tidak ada, sehingga sel tidak berkedip pada acara touch down
sumber
Kita dapat menulis kode seperti
tetapi ketika kita memiliki sel kustom xib di atas baris beri peringatan pada saat itu untuk
xib sel kustom
kita perlu mengatur gaya pemilihan Tidak ada dari pembuat antarmuka
sumber
Anda hanya perlu memasukkan kode ini ke cellForRowAtIndexPath
Untuk menonaktifkan properti pemilihan sel: (Sambil mengetuk sel).
sumber
coba ini
dan
dan Anda juga dapat mengatur gaya pilihan menggunakan interfacebuilder.
sumber
Saya menggunakan ini, yang bekerja untuk saya.
sumber
Meskipun ini adalah solusi terbaik dan termudah untuk mencegah baris dari menampilkan highlight selama pemilihan
Saya juga ingin menyarankan bahwa kadang-kadang berguna untuk menunjukkan secara singkat bahwa baris telah dipilih dan kemudian mematikannya. Ini memperingatkan pengguna dengan konfirmasi apa yang ingin mereka pilih:
sumber
Nonaktifkan penyorotan TableViewCell langsung ke storyboard
sumber
Untuk menonaktifkan sorotan dari UItableviewcell
Dan seharusnya tidak memungkinkan pengguna untuk berinteraksi dengan sel.
sumber
Anda juga dapat mengatur warna latar belakang ke Bersihkan untuk mencapai efek yang sama seperti
UITableViewCellSelectionStyleNone
, jika Anda tidak ingin / tidak bisa menggunakanUITableViewCellSelectionStyleNone
.Anda akan menggunakan kode seperti berikut:
Ini dapat menurunkan kinerja Anda saat Anda menambahkan tampilan berwarna ekstra untuk setiap sel.
sumber
Kamu bisa menggunakan :
di sel untuk baris di metode jalur indeks UITableView Anda.
Anda juga dapat menggunakan:
dalam tableview didselectrowatindexpath metode
sumber
cell.selectionStyle = UITableViewCellSelectionStyle.none
dalam Swift 3.Anda bisa menggunakan ini
sumber
Kamu bisa menggunakan ....
sumber
sumber
Selamat coding !!!
sumber
Anda juga dapat melakukannya dari storyboard. Klik sel tampilan tabel dan di inspektur atribut di bawah Table View Cell, ubah drop down di sebelah Selection menjadi None.
sumber