Jawaban:
Setel selectionStyleproperti sel tabel ke UITableViewCellSelectionStyleNone. Itu akan mencegahnya dari penyorotan, dan Anda juga dapat memeriksa properti itu di tableView:didSelectRowAtIndexPath:.
Untuk sepenuhnya mencegah pemilihan UITableViewCell, minta UITableViewDelegateimplementasinya tableView:willSelectRowAtIndexPath:. Dari metode itu Anda dapat kembali niljika Anda tidak ingin baris tersebut dipilih.
- (NSIndexPath *)tableView:(UITableView *)tv willSelectRowAtIndexPath:(NSIndexPath *)path
{
// Determine if row is selectable based on the NSIndexPath.
if (rowIsSelectable) {
return path;
}
return nil;
}
Ini mencegah baris dipilih dan tableView:didSelectRowAtIndexPath:dipanggil. Namun, perhatikan bahwa ini tidak mencegah baris disorot.
Jika Anda ingin mencegah baris tersebut disorot secara visual saat disentuh, Anda dapat memastikan bahwa sel selectionStyledisetel ke UITableViewCellSelectionStyleNone, atau lebih disukai Anda dapat UITableViewDelegatemenerapkannya tableView:shouldHighlightRowAtIndexPath:sebagai berikut:
- (BOOL)tableView:(UITableView *)tv shouldHighlightRowAtIndexPath:(NSIndexPath *)indexPath
{
// Determine if row is selectable based on the NSIndexPath.
return rowIsSelectable;
}
didSelectRowAtIndexPathkarena willSelectRowAtIndexPathakan selalu dipanggil.
Gunakan ini:
cell.selectionStyle = UITableViewCellSelectionStyleNone;
didSelectRowAtIndexPathmasih 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.html
Punya masalah ini, juga mencoba semua yang telah disebutkan. Trik terakhir, yang menghilangkan "kilatan biru" saat memilih sel tabel adalah menambahkan baris ini:
self.myTableView.allowsSelection = NO;
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!
Set cell.userInteractionEnabled = NO;
Apple mengatakan bahwa hal pertama yang harus Anda lakukan di didSelectRowAtIndexPath adalah membatalkan pilihan baris
[tableView deselectRowAtIndexPath:[tableView indexPathForSelectedRow] animated:NO];
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.
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.
- (void)setSelectable:(BOOL)enabled {
[self setSelectionStyle:UITableViewCellSelectionStyleNone];
[self setUserInteractionEnabled:enabled];
}
- (BOOL)isSelectable {
BOOL disabled = [self selectionStyle]==UITableViewCellSelectionStyleNone &&
[self isUserInteractionEnabled];
return ! disabled;
}
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
func tableView(_ tableView: UITableView, shouldHighlightRowAt indexPath: IndexPath) -> Bool {
let cell = tableView.cellForRow(at: indexPath) as! CustomTableViewCell
if cell.isSelectable == false {
return false
} else {
return true
}
}
Ini adalah versi cepat dari jawaban objc Sebastian Celis.
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.
Gunakan tableView: willDisplayCell: forRowAtIndexPath: alih-alih tableView: didSelectRowAtIndexPath: untuk menghilangkan flash yang muncul saat pertama kali Anda menyentuh sel.
- (void) tableView:(UITableView *)tableView willDisplayCell:(UITableViewCell *)cell forRowAtIndexPath:(NSIndexPath *)indexPath
{
cell.selectionStyle = UITableViewCellSelectionStyleNone;
}
Untuk membuat baris tertentu tidak dipilih, Anda harus membuat beberapa perubahan dalam dua metode delegasi UITableView.
Dalam metode di bawah ini
- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath{
setelah alokasi sel, tulis kode di bawah ini
if(indexPath.row == someCellNumber) cell.selectionStyle =UITableViewCellSelectionStyleNone;
Kode di atas akan mencegah penyorotan sel, jika entah bagaimana pengguna mencoba untuk memilih.
dalam metode delegasi di bawah ini
- (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath
{
[tableView deselectRowAtIndexPath:indexPath animated:YES];
if(indexPath.row == someCellNumber) return;
//for other cells write the code below...
}
jika Anda tidak menulis if(indexPath.row == someCellNumber) return;baris akan tetap dipilih dan ada kemungkinan aplikasi mogok
tableView:shouldHighlightRowAtIndexPath:seperti yang dicatat oleh Ayush di bawah ini