Perbedaan yang paling penting adalah bahwa forIndexPath:
versi menegaskan (lumpuh) jika Anda tidak mendaftarkan kelas atau pena untuk pengidentifikasi. Versi yang lebih lama (non- forIndexPath:
) kembali nil
dalam kasus itu.
Anda mendaftarkan kelas untuk pengidentifikasi dengan mengirim registerClass:forCellReuseIdentifier:
ke tampilan tabel. Anda mendaftarkan pena untuk pengidentifikasi dengan mengirim registerNib:forCellReuseIdentifier:
ke tampilan tabel.
Jika Anda membuat tampilan tabel dan prototipe sel Anda di storyboard, loader storyboard akan mengurus pendaftaran prototipe sel yang Anda definisikan di storyboard.
Sesi 200 - Apa yang Baru di Cocoa Touch dari WWDC 2012 membahas versi (yang baru) forIndexPath:
mulai sekitar 8m30-an. Dikatakan bahwa “Anda akan selalu mendapatkan sel yang diinisialisasi” (tanpa menyebutkan bahwa itu akan macet jika Anda tidak mendaftar kelas atau nib).
Video itu juga mengatakan bahwa "itu akan menjadi ukuran yang tepat untuk jalur indeks itu". Agaknya ini berarti bahwa ia akan mengatur ukuran sel sebelum mengembalikannya, dengan melihat lebar tampilan tabel itu sendiri dan memanggil tableView:heightForRowAtIndexPath:
metode delegasi Anda (jika ditentukan). Inilah sebabnya mengapa perlu jalur indeks.
dequeueReusableCellWithIdentifier:forIndexPath:
akan selalu mengembalikan sel. Entah itu menggunakan kembali sel yang ada atau membuat yang baru dan kembali jika tidak ada sel.Sementara, tradisional
dequeueReusableCellWithIdentifier:
akan mengembalikan sel jika ada yaitu jika ada sel yang dapat digunakan kembali mengembalikan yang lain itu mengembalikan nihil. Jadi, Anda harus menulis ketentuan untuk memeriksanil
nilai juga.Untuk menjawab pertanyaan Anda gunakan
dequeueReusableCellWithIdentifier:
ketika Anda ingin mendukung iOS 5 dan versi yang lebih rendah karenadequeueReusableCellWithIdentifier:forIndexPath
hanya tersedia di iOS 6+Referensi: https://developer.apple.com/library/ios/documentation/uikit/reference/UITableView_Class/Reference/Reference.html#//apple_ref/occ/instm/UITableView/dequeueReusableCellWithIdentifier:forIndexPath :
sumber
[self.tableView registerNib:[UINib nibWithNibName:@"cell" bundle:nil] forCellReuseIdentifier:@"cell"];
Saya tidak pernah mengerti mengapa Apple menciptakan metode yang lebih baru, dequeueReusableCellWithIdentifier: forIndexPath :. Dokumentasi mereka tentang mereka tidak lengkap, dan agak menyesatkan. Satu-satunya perbedaan yang saya dapat membedakan antara kedua metode, adalah bahwa metode yang lebih lama dapat mengembalikan nihil, jika tidak menemukan sel dengan pengenal yang dilewati, sedangkan metode yang lebih baru lumpuh, jika tidak dapat kembali sebuah sel. Kedua metode dijamin untuk mengembalikan sel, jika Anda telah menetapkan pengidentifikasi dengan benar, dan membuat sel dalam storyboard. Kedua metode juga dijamin untuk mengembalikan sel jika Anda mendaftarkan kelas atau xib, dan membuat sel Anda dalam kode atau file xib.
sumber
tableView.estimateHeight
, ukuran sel juga akan ditentukan dengan benar. Saya masih belum mendapatkan manfaat dari metode baru ini.Singkatnya:
Hollemans M. 2016, Bab 2 Daftar Periksa, Apprentice IOS (Edisi 5). hal: 156.
sumber
Saya akan merekomendasikan untuk menggunakan keduanya jika Anda menggunakan konten yang dihasilkan dinamis. Kalau tidak, aplikasi Anda mungkin mogok secara tak terduga. Anda bisa menerapkan fungsi Anda sendiri untuk mengambil sel yang dapat digunakan kembali opsional. Jika ya,
nil
Anda harus mengembalikan sel kosong yang tidak terlihat:Cepat 3
Dan ekstensi untuk mengembalikan sel kosong:
Contoh lengkap cara menggunakannya:
sumber