gpt4 book ai didi

ios - 继承 UITableViewCell 的子类

转载 作者:行者123 更新时间:2023-11-28 21:32:02 24 4
gpt4 key购买 nike

目标是使用通用的 XIB 文件来显示各种对象。为此,我创建了 XIB 并将其 IBOutlets 连接到 UITableView 子类 MyCustomCell

class MyCustomCell:UITableViewCell {
@IBOutlet weak var myLabel:UILabel!
}

这个单元格应该能够显示来自两种类型对象的数据,并且它增强了让单元格处理它自己的人口而不是从 tableViewDelegate 访问 myLabel 的便利性,因此需要两个单独的子类:

class ObjectTypeATableViewCell:MyCustomCell {

var record:ObjectTypeA! {
didSet {
myLabel.text = record.name
}
}
}

class ObjectTypeBTableViewCell:MyCustomCell {
var record:ObjectTypeB! {
didSet {
myLabel.text = String(record.totalQty)
}
}
}

一切都很好。然而,问题在于重用 TableView 上的单元格。下面是我正在使用的这个实现。

class MyTable: UITableView, UITableViewDataSource {

var records:Array<AnyObject>()

/// Run when the tableView is loaded
func xibSetup() {
let nib = UINib(nibName: "MyCustomCell", bundle: nil)
registerNib(nib, forCellReuseIdentifier: "recordCell")
dataSource = self
}

func tableView(tableView: UITableView, cellForRowAtIndexPath indexPath: NSIndexPath) -> UITableViewCell {
let object = sectionedItems().itemsInSections[indexPath.section][indexPath.row]
if let i = object as? ObjectTypeA {
let cell = dequeueReusableCellWithIdentifier("recordCell") as! ObjectTypeATableViewCell
cell.record = i
return cell
} else if let i = object as? ObjectTypeB {
let cell = dequeueReusableCellWithIdentifier("recordCell") as! ObjectTypeBTableViewCell
cell.record = i
return cell
} else {
let cell = UITableViewCell()
cell.textLabel?.text = "unknown object type."
return cell
}
}

}

单元格出队时发生 fatal error :

无法将类型“MyProject.MyCustomCell”(0x10ade39e0)的值转换为“MyProject。 ObjectTypeATableViewCell' (0x10ade3e20)。

如何将单元格正确地转换为子类?

最佳答案

不需要子类化 MyCustomCell,你可以像这样声明一个协议(protocol)来使用:

protocol ObjectTypeProtocol {
func getText() -> String
}

class ObjectTypeA : ObjectTypeProtocol{
var name = "name of ObjectTypeA"
//....
func getText() -> String {
return name
}
}
class ObjectTypeB : ObjectTypeProtocol{
var totalQty = "total of ObjectTypeB"
//....
func getText() -> String {
return String(totalQty)
}
}

class MyCustomCell: UITableViewCell {
@IBOutlet var myLabel:UILabel!

var record:ObjectTypeProtocol! {
didSet {
myLabel.text = record.getText()
}
}
}

关于ios - 继承 UITableViewCell 的子类,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35616944/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com