Saya mencoba membuat sel tampilan tabel kustom dari ujung pena. Saya mengacu pada artikel ini di sini . Saya menghadapi dua masalah.
Saya membuat file .xib dengan objek UITableViewCell yang diseret ke sana. Saya membuat subkelas UITableViewCell
dan menetapkannya sebagai kelas sel dan Sel sebagai pengenal yang dapat digunakan kembali.
import UIKit
class CustomOneCell: UITableViewCell {
@IBOutlet weak var middleLabel: UILabel!
@IBOutlet weak var leftLabel: UILabel!
@IBOutlet weak var rightLabel: UILabel!
required init(coder aDecoder: NSCoder!) {
super.init(coder: aDecoder)
}
override init(style: UITableViewCellStyle, reuseIdentifier: String!) {
super.init(style: style, reuseIdentifier: reuseIdentifier)
}
override func awakeFromNib() {
super.awakeFromNib()
// Initialization code
}
override func setSelected(selected: Bool, animated: Bool) {
super.setSelected(selected, animated: animated)
// Configure the view for the selected state
}
}
Di UITableViewController saya memiliki kode ini,
import UIKit
class ViewController: UITableViewController, UITableViewDataSource, UITableViewDelegate {
var items = ["Item 1", "Item2", "Item3", "Item4"]
override func viewDidLoad() {
super.viewDidLoad()
}
// MARK: - UITableViewDataSource
override func tableView(tableView: UITableView!, numberOfRowsInSection section: Int) -> Int {
return items.count
}
override func tableView(tableView: UITableView!, cellForRowAtIndexPath indexPath: NSIndexPath!) -> UITableViewCell! {
let identifier = "Cell"
var cell: CustomOneCell! = tableView.dequeueReusableCellWithIdentifier(identifier) as? CustomOneCell
if cell == nil {
tableView.registerNib(UINib(nibName: "CustomCellOne", bundle: nil), forCellReuseIdentifier: identifier)
cell = tableView.dequeueReusableCellWithIdentifier(identifier) as? CustomOneCell
}
return cell
}
}
Kode ini sesuai dengan tanpa kesalahan tetapi ketika saya menjalankannya di simulator, terlihat seperti ini.
Di UITableViewController di storyboard, saya belum melakukan apa pun pada sel. Pengenal kosong dan tidak ada subclass. Saya mencoba menambahkan pengenal Sel ke sel prototipe dan menjalankannya lagi tetapi saya mendapatkan hasil yang sama.
Kesalahan lain yang saya hadapi adalah, ketika saya mencoba menerapkan metode berikut di UITableViewController.
override func tableView(tableView: UITableView!, willDisplayCell cell: CustomOneCell!, forRowAtIndexPath indexPath: NSIndexPath!) {
cell.middleLabel.text = items[indexPath.row]
cell.leftLabel.text = items[indexPath.row]
cell.rightLabel.text = items[indexPath.row]
}
Seperti ditunjukkan dalam artikel saya sebutkan saya mengubah cell
bentuk jenis parameter ini UITableViewCell
untuk CustomOneCell
yang subclass saya UITableViewCell. Tapi saya mendapatkan kesalahan berikut,
Mengganti metode dengan selector 'tableView: willDisplayCell: forRowAtIndexPath:' memiliki tipe yang tidak kompatibel '(UITableView !, CustomOneCell !, NSIndexPath!) -> ()'
Adakah yang tahu cara mengatasi kesalahan ini? Ini sepertinya berfungsi dengan baik di Objective-C.
Terima kasih.
EDIT: Saya baru menyadari jika saya mengubah orientasi simulator ke lanskap dan mengubahnya kembali ke potret, sel-selnya akan muncul! Saya masih tidak tahu apa yang sedang terjadi. Saya mengunggah proyek Xcode di sini yang mendemonstrasikan masalahnya jika Anda punya waktu untuk melihat sekilas.