Saya menampilkan tableview
konten grup yang diuraikan dari XML. Saya ingin menonaktifkan acara klik di atasnya (saya seharusnya tidak dapat mengkliknya sama sekali) Tabel ini berisi dua grup. Saya ingin menonaktifkan pilihan untuk grup pertama saja tetapi tidak untuk grup kedua. Mengklik baris pertama grup kedua navigates
ke tabung saya player view
.
Bagaimana saya bisa membuat grup atau baris tertentu saja yang bisa dipilih?
- (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath
{
if(indexPath.section!=0)
if(indexPath.row==0)
[[UIApplication sharedApplication] openURL:[NSURL URLWithString:tubeUrl]];
}
Terima kasih.
sumber
tableView:shouldHighlightRowAtIndexPath:
adalahUITableViewDelegate
metode baru yang mengembalikanBOOL
berdasarkan apakah yang disahkanindexPath
harus disorot atau tidak . Jika Anda membangun untuk 6.0 dan yang lebih baru, saya sangat merekomendasikan API baru ini.cell!.selectionStyle = .None
kekuatan yang membuka bungkusan sel, memungkinkan Anda untuk mengakses propertinya.Jika Anda ingin membuat baris (atau bagian dari baris) tidak dapat dipilih , terapkan
UITableViewDelegate
metode tersebut-tableView:willSelectRowAtIndexPath:
(juga disebutkan oleh TechZen). JikaindexPath
tidak dapat dipilih , kembalinil
, jika tidak, kembalikanindexPath
. Untuk mendapatkan perilaku pemilihan default, Anda hanya mengembalikan yangindexPath
diteruskan kedelegate
metode Anda , tetapi Anda juga dapat mengubah pemilihan baris dengan mengembalikan yang berbedaindexPath
.contoh:
sumber
Mulai di iOS 6, Anda dapat menggunakan
Jika Anda kembali
NO
, itu menonaktifkan sorotan pilihan dan storyboard memicu segues yang terhubung ke sel itu.Metode ini dipanggil ketika sentuhan turun pada satu baris. Kembali
NO
ke pesan itu menghentikan proses pemilihan dan tidak menyebabkan baris yang saat ini dipilih kehilangan tampilan yang dipilih saat sentuhannya turun.Referensi Protokol UITableViewDelegate
sumber
Tidak ada dari jawaban di atas yang benar-benar mengatasi masalah dengan benar. Alasannya adalah bahwa kami ingin menonaktifkan pemilihan sel tetapi tidak perlu subview di dalam sel.
Dalam kasus saya, saya sedang menghadirkan UISwitch di tengah baris dan saya ingin menonaktifkan pilihan untuk sisa baris (yang kosong) tetapi tidak untuk saklar! Cara yang tepat untuk melakukan itu karenanya dalam metode
di mana pernyataan formulir
menonaktifkan pemilihan untuk sel tertentu sementara pada saat yang sama memungkinkan pengguna untuk memanipulasi sakelar dan karenanya menggunakan pemilih yang sesuai. Ini tidak benar jika seseorang menonaktifkan interaksi pengguna melalui
metode yang hanya menyiapkan sel dan tidak memungkinkan interaksi dengan UISwitch.
Apalagi menggunakan metode
untuk membatalkan pilihan sel dengan pernyataan formulir
masih menunjukkan baris yang dipilih saat pengguna menekan konten asliMelihat sel.
Hanya dua sen saya. Saya cukup yakin banyak orang akan menemukan ini berguna.
sumber
willSelectRowAtIndexPath
memiliki masalah yang sama, subview tidak dapat dipilih.Anda menjebak pilihan dengan metode sumber data ini.
Dalam metode ini, Anda memeriksa apakah baris yang dipilih adalah Anda ingin dipilih. Jika ya, ambil tindakan, jika tidak, jangan lakukan apa pun.
Sayangnya, Anda tidak dapat mematikan seleksi hanya untuk satu bagian. Seluruh meja atau tidak sama sekali.
Namun Anda dapat mengatur
selectionStyle
properti sel tabelUITableViewCellSelectionStyleNone
. Saya percaya itu akan membuat seleksi tidak terlihat. Dikombinasikan dengan metode di atas yang seharusnya membuat sel-sel terlihat benar-benar lembam dari perspektif pengguna.Sunting01:
Jika Anda memiliki tabel di mana hanya beberapa baris yang dipilih, penting bahwa sel-sel dari baris yang dipilih secara visual berbeda dari baris yang tidak dapat dipilih. Tombol aksesori chevron adalah cara standar untuk melakukan ini.
Bagaimanapun Anda melakukannya, Anda tidak ingin pengguna Anda mencoba untuk memilih baris dan berpikir aplikasi telah malfed karena baris tidak melakukan apa-apa.
sumber
Help -> Developer documentation
, lalu salin nama-nama metode ke dalam bidang pencarian untuk melihat cara kerjanya. Dokumentasi Pengembang juga berisi kode sampel.Untuk Swift 4.0 misalnya:
sumber
Anda perlu melakukan sesuatu seperti berikut ini untuk menonaktifkan pemilihan sel dalam
cellForRowAtIndexPath
metode:Untuk menampilkan sel yang berwarna abu-abu, masukkan yang berikut dalam
tableView:WillDisplayCell:forRowAtIndexPath
metode:Satu metode memungkinkan Anda untuk mengontrol interaktivitas, yang lain memungkinkan Anda untuk mengontrol tampilan UI.
sumber
Untuk menghentikan hanya beberapa sel yang dipilih gunakan:
Selain mencegah seleksi, ini juga menghentikan tableView: didSelectRowAtIndexPath: dipanggil untuk sel yang telah disetel.
sumber
userInteractionEnabled
untuk TIDAK pada satu sel (lebih jelas, satu indexPath), interaksi pengguna dari beberapa sel LAIN dinonaktifkan. Saya tidak tahu mengapa ini terjadi setiap kali saya gunakanuserInteractionEnabled
pada sel tampilan tabel. Apakah itu bug yang diketahui atau saya melakukan sesuatu yang salah?if [indexPath row] == 0
) keNO
dalamtableView:cellForRowAtIndexPath:
setelah dequeueing sel. Ini biasanya berfungsi OK pada awalnya. Kemudian setelah beberapa panggilanreloadData
, tiba-tiba baris kelima tidak diijinkan interaksi, lalu baris keempat .. Saya tidak tahu kapan itu akan terjadi. Semuanya terlihat acak.if [indexPath row] == 0) { set to NO } else { set to YES }
Anda bisa menggunakan
tableView:willDisplayCell
metode ini untuk melakukan semua jenis penyesuaian ke tableViewCell.Dalam kode di atas ini, pengguna hanya dapat memilih baris pertama di bagian kedua dari tableView. Selebihnya semua baris tidak dapat dipilih. Terima kasih!
sumber
Untuk cepat:
sumber
Solusi saya berdasarkan model data:
sumber
Untuk swift 4.0 Ini akan membantu. Ini akan menonaktifkan Cell dalam metode didSelectRowAtIndexPath tetapi tetap membuat subview dapat diklik.
sumber
return indexPath.row == clickableIndex ? indexPath : nil
:, jaga kode Anda sedikit lebih bersih ;-)Gunakan ini untuk membuat sel tampak seperti dinonaktifkan dan tidak dapat dipilih:
Penting: perhatikan bahwa ini hanya properti penataan, dan tidak benar-benar menonaktifkan sel. Untuk melakukan itu, Anda harus memeriksa implementasi delegasi
selectionStyle
AndadidSelectRowAtIndexPath:
:sumber
Saya suka jawaban Brian Chapados di atas. Namun, ini berarti Anda mungkin memiliki duplikat logika di kedua cellForRowAtIndexPath dan kemudian di willSelectRowAtIndexPath yang dapat dengan mudah keluar dari sinkronisasi. Alih-alih menduplikasi logika, cukup periksa selectionStyle:
sumber
Saya menemukan ini berguna karena berfungsi dengan tabel statis dan dinamis. Saya hanya mengatur indikator pengungkapan pada sel-sel yang saya ingin izinkan seleksi.
sumber
pada Xcode 7 tanpa coding Anda cukup melakukan hal berikut:
Pada tampilan kerangka, pilih Tampilan Tabel Sel. (Sel bersarang di bawah Scene Pengontrol Tampilan Tabel> Pengontrol Tampilan Tabel> Tampilan Tabel. Anda mungkin harus mengungkapkan objek tersebut untuk melihat sel tampilan tabel)
Di inspektur Atribut, temukan bidang berlabel Pilihan dan pilih Tidak Ada. atribute inspector Dengan opsi ini, sel tidak akan mendapatkan sorotan visual ketika pengguna mengetuknya.
sumber
SEDERHANA
Cukup gunakan
cell.userInteractionEnabled = YES;
ke sel jika dapat menavigasi dancell.userInteractionEnabled = NO;
sebaliknyasumber
Terapkan metode yang tepat
tableView:willSelectRowAtIndexPath:
di sumber data untuk tabel Anda. Jika Anda ingin baris di jalur disorot, kembalikan indexPath yang diberikan. Jika tidak, kembalikan nihil.Contoh dari aplikasi saya:
Yang menyenangkan tentang ini adalah bahwa
shouldPerformSegueWithIdentifier:sender:
tidak akan dipanggil jika metode di atas mengembalikan nol, meskipun saya ulangi tes di atas hanya untuk kelengkapan.sumber
Untuk Xcode 6.3:
sumber
Saya setuju dengan jawaban Bryan
jika aku melakukan
maka subview dalam sel tidak akan berinteraksi dengan pengguna.
Di situs lain, pengaturan
akan memicu metode didSelect meskipun tidak memperbarui warna pemilihan.
Menggunakan willSelectRowAt adalah cara saya memecahkan masalah saya. Contoh:
sumber
mulai dari
tableView.allowsMultipleSelection = true
Anda harus membatalkan pilihan sel-sel bagian saat memilih:sumber
untuk swift 3.0 Anda dapat menggunakan kode di bawah ini untuk menonaktifkan interaksi pengguna ke sel UITableView
sumber