Bagaimana cara mengatur properti sel UITableView menjadi tidak dapat dipilih? Saya tidak ingin melihat kotak pilihan biru itu saat pengguna mengetuk sel.
iphone
cocoa-touch
Mugunth
sumber
sumber
tableView:shouldHighlightRowAtIndexPath:
seperti yang dicatat oleh Ayush di bawah iniJawaban:
Setel
selectionStyle
properti sel tabel keUITableViewCellSelectionStyleNone
. Itu akan mencegahnya dari penyorotan, dan Anda juga dapat memeriksa properti itu ditableView:didSelectRowAtIndexPath:
.sumber
Untuk Mencegah Pemilihan Baris
Untuk sepenuhnya mencegah pemilihan
UITableViewCell
, mintaUITableViewDelegate
implementasinyatableView:willSelectRowAtIndexPath:
. Dari metode itu Anda dapat kembalinil
jika Anda tidak ingin baris tersebut dipilih.Ini mencegah baris dipilih dan
tableView:didSelectRowAtIndexPath:
dipanggil. Namun, perhatikan bahwa ini tidak mencegah baris disorot.Untuk Mencegah Penyorotan Baris
Jika Anda ingin mencegah baris tersebut disorot secara visual saat disentuh, Anda dapat memastikan bahwa sel
selectionStyle
disetel keUITableViewCellSelectionStyleNone
, atau lebih disukai Anda dapatUITableViewDelegate
menerapkannyatableView:shouldHighlightRowAtIndexPath:
sebagai berikut:sumber
didSelectRowAtIndexPath
karenawillSelectRowAtIndexPath
akan selalu dipanggil.Gunakan ini:
sumber
didSelectRowAtIndexPath
masih dipanggil.Hanya untuk iOS 6+.
Anda dapat mengimplementasikan metode ini
tableView:shouldHighlightRowAtIndexPath:
dalam delegasi Anda. Baca seterusnya di sini: http://developer.apple.com/library/ios/#documentation/uikit/reference/UITableViewDelegate_Protocol/Reference/Reference.htmlsumber
Punya masalah ini, juga mencoba semua yang telah disebutkan. Trik terakhir, yang menghilangkan "kilatan biru" saat memilih sel tabel adalah menambahkan baris ini:
Tidak yakin apakah itu satu garis atau semuanya digabungkan, tetapi sebagai hasil yang sangat bagus saya tidak mendapatkan lagi pilihan biru atau bahkan kilatan biru. Senang!
sumber
Set
cell.userInteractionEnabled = NO;
sumber
menggunakan IB juga merupakan cara yang elegan:
sumber
Apple mengatakan bahwa hal pertama yang harus Anda lakukan di didSelectRowAtIndexPath adalah membatalkan pilihan baris
Kemudian Anda dapat mengubah AccessoryType menjadi tanda centang, atau tidak ada, dll. Jadi, saat Anda memasukkan didSelectRowAtIndexPath Anda dapat membatalkan pilihan baris, dan jika tidak dimaksudkan untuk dipilih, jangan centang baris itu.
Panduan Pemrograman Tampilan Tabel
sumber
Cara lain adalah dengan menambahkan beberapa metode kategori
UITableViewCell
. Saya lebih suka ini daripada jawaban Sebastians (juga bagus) karena cara saya membangun meja saya. Saya pikir itu mungkin berguna untuk orang lain.sumber
Swift 4:
Anda dapat mencegah pemilihan dan penyorotan dengan menggunakan UITableViewDelegate: shouldHighlightRowAt
Jawaban ini mengasumsikan Anda memiliki sel khusus yang dibuat bernama: CustomTableViewCell
Dan Anda telah membuat boolean di dalam sel khusus bernama: isSelectable
Ini adalah versi cepat dari jawaban objc Sebastian Celis.
sumber
Jika Anda telah mendesain sel Anda di Interface Builder, Anda dapat melakukannya dengan menghapus kotak centang dari ' User Interaction Enabled ' untuk
tableViewCell
.sumber
Ada cara sederhana lain untuk menghindari seleksi yang muncul sebagai biru.
Pilih sel yang tidak ingin Anda munculkan berwarna biru.
Kemudian pilih inspektur atribut (ikon perisai di sebelah ikon penggaris pada tampilan properti di samping).
Kemudian ubah bidang 'Pilihan' dari 'Biru' menjadi 'Tidak Ada'.
Catatan, mungkin ini masih memilih, itu tidak akan muncul sebagai dipilih jika Anda hanya ingin menghindari efek UI.
sumber
Gunakan tableView: willDisplayCell: forRowAtIndexPath: alih-alih tableView: didSelectRowAtIndexPath: untuk menghilangkan flash yang muncul saat pertama kali Anda menyentuh sel.
sumber
Untuk membuat baris tertentu tidak dipilih, Anda harus membuat beberapa perubahan dalam dua metode delegasi UITableView.
Dalam metode di bawah ini
setelah alokasi sel, tulis kode di bawah ini
Kode di atas akan mencegah penyorotan sel, jika entah bagaimana pengguna mencoba untuk memilih.
dalam metode delegasi di bawah ini
jika Anda tidak menulis
if(indexPath.row == someCellNumber) return;
baris akan tetap dipilih dan ada kemungkinan aplikasi mogoksumber
Cepat 4:
Di kelas sel:
sumber
Cepat 5
sumber