Saya ingin menggunakan UITableview dengan tableViewCells kustom yang berbeda. 3 sel saya adalah sebagai berikut:
- Sel1: harus memiliki gambar dan label.
- Sel2: harus memiliki dua label.
- Sel3: harus memiliki dayPicker.
Saya tidak ingin memberi kode tag untuk sel. Bagaimana saya bisa mengatur ini di Swift. Apakah saya harus membuat kode kelas saya sendiri untuk setiap sel? Bisakah saya menggunakan satu tableviewController? Bagaimana cara mengisi data di sel yang berbeda?
Saya ingin membuat tableView, seperti aplikasi kontak perangkat iOS.
swift
uitableview
Easyglider
sumber
sumber
Jawaban:
Mari saya mulai dengan menjawab pertanyaan Anda terlebih dahulu.
Apakah saya harus membuat kode kelas sendiri untuk setiap sel? => Ya, saya yakin begitu. Setidaknya, saya akan melakukan itu.
Bisakah saya menggunakan satu tableviewController? => Ya, Anda bisa. Namun, Anda juga dapat memiliki tampilan tabel di dalam Pengontrol Tampilan.
Bagaimana cara mengisi data di sel yang berbeda? => Bergantung pada kondisinya, Anda dapat mengisi data di sel yang berbeda. Misalnya, anggaplah Anda ingin dua baris pertama menjadi seperti tipe sel pertama. Jadi, Anda cukup membuat / menggunakan kembali jenis sel pertama dan mengatur datanya. Akan lebih jelas, saat saya menunjukkan tangkapan layar, saya kira.
Izinkan saya memberi Anda contoh dengan TableView di dalam ViewController. Setelah Anda memahami konsep utamanya, maka Anda dapat mencoba dan memodifikasi sesuka Anda.
Langkah 1: Buat 3 TableViewCells Kustom. Saya menamakannya, FirstCustomTableViewCell, SecondCustomTableViewCell, ThirdCustomTableViewCell. Anda harus menggunakan nama yang lebih bermakna.
Langkah 2: Buka Main.storyboard dan seret dan lepas TableView di dalam Pengontrol Tampilan Anda. Sekarang, pilih tampilan tabel dan pergi ke inspektur identitas. Setel "Prototype Cells" ke 3. Di sini, Anda baru saja memberi tahu TableView bahwa Anda mungkin memiliki 3 jenis sel yang berbeda.
Langkah 3: Sekarang, pilih sel pertama di TableView Anda dan di inspektur identitas, letakkan "FirstCustomTableViewCell" di bidang kelas Kustom dan kemudian setel pengenal sebagai "firstCustomCell" di inspektur atribut.
Lakukan hal yang sama untuk semua yang lain- Setel Kelas Kustomnya masing-masing sebagai "SecondCustomTableViewCell" dan "ThirdCustomTableViewCell". Juga setel pengenal sebagai secondCustomCell dan thirdCustomCell secara berurutan.
Langkah 4: Edit Kelas Sel Kustom dan tambahkan outlet sesuai kebutuhan Anda. Saya mengeditnya berdasarkan pertanyaan Anda.
PS: Anda harus meletakkan outlet di bawah definisi kelas.
Jadi, Di FirstCustomTableViewCell.swift, di bawah
Anda akan menempatkan outlet tampilan label dan gambar Anda.
dan di SecondCustomTableViewCell.swift, tambahkan dua label seperti-
dan ThirdCustomTableViewCell.swift akan terlihat seperti-
Langkah 5: Di ViewController Anda, buat Outlet untuk TableView Anda dan atur koneksi dari storyboard. Selain itu, Anda perlu menambahkan UITableViewDelegate dan UITableViewDataSource dalam definisi kelas sebagai daftar protokol. Jadi, definisi kelas Anda akan terlihat seperti-
Setelah itu lampirkan UITableViewDelegate dan UITableViewDatasource tampilan tabel Anda ke pengontrol. Pada titik ini viewController.swift Anda akan terlihat seperti-
PS: Jika Anda menggunakan TableViewController daripada TableView di dalam ViewController, Anda bisa melewatkan langkah ini.
Langkah 6: Seret dan lepas tampilan gambar dan label di sel Anda sesuai dengan kelas Sel. dan kemudian memberikan koneksi ke outlet mereka dari storyboard.
Langkah 7: Sekarang, tulis metode yang diperlukan UITableViewDatasource di pengontrol tampilan.
sumber
Pembaruan Swift 3.0 + dengan kode minimum
Konsep dasar: Membuat tampilan tabel dengan prototipe sel dinamis. Tetapkan pengenal dan buat kelas sel tampilan tabel kustom untuk setiap prototipe sel. Memulai dan memperlihatkan sel kustom dalam metode delegasi tampilan tabel.
1. Buat sel di papan cerita
Seret tableView ke pengontrol tampilan Anda, tambahkan sel prototipe ke sana, lalu letakkan elemen UI ke sel tampilan tabel Anda, tambahkan batasan dengan benar jika diperlukan.
2. Buat
UITableViewCell
kelas khususTambahkan kode berikut ke proyek Anda. Saya meletakkannya tepat di atas kelas view controller.
3. Tetapkan kelas dan pengenal khusus ke prototipe sel
Untuk setiap prototipe sel di storyboard, tetapkan kelas khusus yang dibuat dari langkah 2, lalu masukkan pengenal unik.
4. Hubungkan elemen UI ke kode swift
Kontrol seret tampilan tabel dan sambungkan ke kelas pengontrol tampilan. Kontrol seret elemen UI yang ditambahkan ke prototipe sel pada langkah 1, dan hubungkan ke kelas sel tampilan tabel yang sesuai.
5. Tambahkan kode untuk melihat pengontrol dan mengontrol tampilan tabel
Buat pengontrol tampilan Anda sesuai dengan delegasi tampilan tabel
Di
viewDidLoad
, siapkan delegasi tampilan tabel dan sumber data.Terakhir, tambahkan dua metode delegasi untuk mengontrol tampilan tabel Anda, sesuai persyaratan minimum.
6. Cobalah :)
sumber
Jawaban di atas adalah jawaban terbaik, tetapi ada BANYAK alasan untuk mendapatkan masalah ini. Berikut adalah solusi potensial lain untuk siapa pun yang memiliki masalah ini:
Masalah saya adalah bahwa saya beralih ke kelas ViewController dan bukan tampilan storyboard. Jadi referensi saya ke sel papan cerita tidak ada artinya, karena papan cerita tidak digunakan.
Saya melakukan ini:
Dan saya perlu melakukan sesuatu seperti ini:
Semoga ini bisa membantu seseorang.
sumber
UITableViewController
mewarisiUIViewController
yang sudahUITableviewDataSource
&UITableviewDelegate
dipetakan sendiri.Anda bisa membuat subkelas
UITableViewController
atau menggunakan bagianTableView
dalamViewController
. Setelah itu Anda harus mengimplementasikan metode yang diperlukan (cellForRowAtIndexPath
and numberOfRowsInSection
) yang dideklarasikan diUITableviewDataSource
.Juga di storyboard, Anda perlu membuat prototipe sel dengan Id unik.
Ada tipe dasar sel, dengan (judul, subtitle misalnya) - Anda juga dapat menggunakannya jika tidak memerlukan konfigurasi khusus.
Jadi, untuk pemilih, ya, Anda perlu membuat sel khusus Anda sendiri. Buat
UITableViewCell
pemilih tanggal penahanan kelas khusus yang diperlukan dan pastikan untuk menggunakan delegasi untuk mengirim kembali hasil yang diinginkan ke AndaViewController
.sumber