Aku tahu pertanyaan ini adalah untuk iOS 5, tapi untuk kepentingan pembaca masa depan, catatan bahwa iOS efektif 6 kita dapat sekarang menggunakan dequeueReusableHeaderFooterViewWithIdentifier
bukan dequeueReusableCellWithIdentifier
.
Jadi viewDidLoad
, telepon salah registerNib:forHeaderFooterViewReuseIdentifier:
atau registerClass:forHeaderFooterViewReuseIdentifier:
. Lalu masuk viewForHeaderInSection
, panggil tableView:dequeueReusableHeaderFooterViewWithIdentifier:
. Anda tidak menggunakan prototipe sel dengan API ini (ini adalah tampilan berbasis NIB atau tampilan yang dibuat secara program), tetapi ini adalah API baru untuk header dan footer yang dequeued.
Cukup gunakan sel prototipe sebagai header dan / atau footer bagian Anda.
tableView:viewForHeaderInSection:
metode atautableView:viewForFooterInSection:
metode tersebut[tableView dequeueReusableCellWithIdentifier:]
untuk mendapatkan headertableView:heightForHeaderInSection:
metode.Sunting: Cara mengubah judul tajuk (pertanyaan yang dikomentari):
tableView:viewForHeaderInSection:
metode Anda, dapatkan label dengan menelepon:sumber
viewForHeaderInSection
metode (tidak perlu menambahkan UIViews khusus).dequeueReusableHeaderFooterViewWithIdentifier
diperkenalkan, dan sekarang lebih disukai daripada jawaban ini. Tetapi menggunakan itu dengan benar sekarang membutuhkan lebih banyak langkah. Saya memiliki panduan @ samwize.com/2015/11/06/… .UITableViewCell
sebagai tampilan tajuk. Anda akan sangat kesulitan untuk men-debug gangguan visual - tajuk terkadang akan hilang karena bagaimana sel dikosongkan dan Anda akan mencari berjam-jam mengapa sampai Anda menyadariUITableViewCell
tidak termasuk dalamUITableView
tajuk.Di iOS 6.0 dan di atasnya, banyak hal telah berubah dengan
dequeueReusableHeaderFooterViewWithIdentifier
API baru .Saya telah menulis panduan (diuji pada iOS 9), yang dapat diringkas seperti:
UITableViewHeaderFooterView
viewDidLoad
viewForHeaderInSection
dan gunakandequeueReusableHeaderFooterViewWithIdentifier
untuk mendapatkan kembali header / footersumber
Saya membuatnya bekerja di iOS7 menggunakan sel prototipe di storyboard. Saya memiliki tombol di tampilan tajuk bagian kustom saya yang memicu segue yang diatur di storyboard.
Mulailah dengan solusi Tieme
Seperti yang ditunjukkan oleh pedro.m, masalah dengan ini adalah mengetuk header bagian menyebabkan sel pertama di bagian tersebut dipilih.
Seperti yang ditunjukkan Paul Von, ini diperbaiki dengan mengembalikan konten sel, bukan seluruh sel.
Namun, seperti yang ditunjukkan oleh Hons, penekanan yang cukup lama pada header bagian tersebut akan merusak aplikasi.
Solusinya adalah dengan menghapus gestureRecognizers dari contentView.
Jika Anda tidak menggunakan gerakan dalam tampilan tajuk bagian Anda, retasan kecil ini sepertinya menyelesaikannya.
sumber
Jika Anda menggunakan storyboard, Anda dapat menggunakan sel prototipe di tampilan tabel untuk tata letak tampilan header Anda. Menyetel id unik dan viewForHeaderInSection Anda bisa membuat sel dengan ID itu dan melemparkannya ke UIView.
sumber
Jika Anda memerlukan Implementasi Swift dari ini, ikuti petunjuk pada jawaban yang diterima dan kemudian di dalam Anda UITableViewController menerapkan metode berikut:
sumber
Solusi yang saya temukan pada dasarnya adalah solusi yang sama yang digunakan sebelum pengenalan storyboard.
Buat file kelas antarmuka baru yang kosong. Seret UIView ke kanvas, tata letak seperti yang diinginkan.
Muat nib secara manual, tetapkan ke bagian header / footer yang sesuai dalam metode delegasi viewForHeaderInSection atau viewForFooterInSection.
Saya berharap Apple menyederhanakan skenario ini dengan storyboard dan terus mencari solusi yang lebih baik atau lebih sederhana. Misalnya header dan footer tabel kustom langsung ditambahkan.
sumber
tableView:titleForHeaderInSection
, yang merupakan one-liner.Saat Anda mengembalikan konten sel Anda akan memiliki 2 masalah:
viewForHeaderInSection
panggilan, Anda membuat sel baru)Larutan:
Kelas pembungkus untuk header tabel \ footer. Itu hanya wadah, yang diwarisi dari
UITableViewHeaderFooterView
, yang menyimpan sel di dalamnyahttps://github.com/Magnat12/MGTableViewHeaderWrapperView.git
Daftarkan kelas di UITableView Anda (misalnya, dalam viewDidLoad)
Dalam UITableViewDelegate Anda:
sumber
Saya biasa melakukan hal berikut untuk membuat tampilan header / footer dengan malas:
[NSNull null]
sumber
Saya mengalami masalah dalam skenario di mana Header tidak pernah digunakan kembali bahkan melakukan semua langkah yang tepat.
Jadi sebagai catatan tip untuk semua orang yang ingin mencapai situasi acara bagian kosong (0 baris) diingatkan bahwa:
dequeueReusableHeaderFooterViewWithIdentifier tidak akan menggunakan kembali header sampai Anda mengembalikan setidaknya satu baris
Semoga ini bisa membantu
sumber
Untuk menindaklanjuti saran Damon , berikut adalah bagaimana saya membuat header dapat dipilih seperti baris normal dengan indikator pengungkapan.
Saya menambahkan Tombol subkelas dari UIButton (nama subkelas "ButtonWithArgument") ke sel prototipe header dan menghapus teks judul (teks "Judul" tebal adalah UILabel lain dalam sel prototipe)
kemudian atur Tombol ke seluruh tampilan tajuk, dan menambahkan indikator pengungkapan dengan trik Avario
ButtonWithArgument.h
ButtonWithArgument.m
sumber
Anda harus menggunakan solusi Tieme sebagai basis tetapi lupakan tentang
viewWithTag:
pendekatan mencurigakan dan lainnya, alih-alih mencoba memuat ulang tajuk Anda (dengan memuat ulang bagian itu).Jadi setelah Anda mengatur tampilan tajuk sel kustom Anda dengan semua
AutoLayout
barang mewah , cukup dequeue dan kembalikan contentView setelah pengaturan Anda, seperti:sumber
Bagaimana dengan solusi di mana header didasarkan pada view array:
Selanjutnya dalam delegasi:
sumber
Tambahkan sel
StoryBoard
, dan aturreuseidentified
Kode
dan
Menggunakan:
sumber
Mirip dengan jawaban laszlo tetapi Anda dapat menggunakan kembali sel prototipe yang sama untuk sel tabel dan sel header bagian. Tambahkan dua fungsi pertama di bawah ini ke subClass UIViewController Anda
sumber
Inilah jawaban @Vitaliy Gozhenko , di Swift.
Untuk meringkas Anda akan membuat UITableViewHeaderFooterView yang berisi UITableViewCell. UITableViewCell ini akan menjadi "dequeuable" dan Anda dapat mendesainnya di storyboard Anda.
Buat kelas UITableViewHeaderFooterView
Hubungkan tampilan tabel Anda dengan kelas ini di fungsi viewDidLoad Anda:
Saat menanyakan, untuk header bagian, keluarkan CustomHeaderFooterView, dan masukkan sel ke dalamnya
sumber