我为原型单元格定义了一个名为c1的类,如下所示:
我这样定义c1的代码:
class c1 : UITableViewCell {
public func configure(indexPath: IndexPath) -> UITableViewCell {
let place = places[indexPath.row]
self.textLabel?.text = place.name
self.detailTextLabel?.text = "\(place.timestamp)"
return self
}
}
在UITableViewController
以下代码中:
override func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell {
let cell = tableView.dequeueReusableCell(withIdentifier: "Cell1", for: indexPath)
// Configure the cell...
return cell.configure(indexPath);
}
但这行得通不是因为obv。编译器不了解c1:“类型'UITableViewCell
'的值没有成员'configure
'”
我不明白为什么:如果我在情节提要中指定类名“ c1”,我希望XCODE实例化外观。自动重用类。
因此,tableView方法应该返回运行时实例化的“ c1”类,该类是UITableViewCell
的子代,才能访问“配置”方法?
答案 0 :(得分:0)
只需将单元格投射到您的特定单元格
let cell = tableView.dequeueReusableCell(withIdentifier: "Cell1", for: indexPath) as? c1
工作完成
答案 1 :(得分:0)
必须强制转换UITableview
单元格的类型
override func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell {
let cell = tableView.dequeueReusableCell(withIdentifier: "Cell1", for: indexPath) as? c1 // to inherit the method of class c1, need to cast
// Configure the cell...
return cell.configure(indexPath);
}
答案 2 :(得分:0)
请在dequeueReusableCell
上单击⌥或阅读documentation
func dequeueReusableCell(withIdentifier identifier: String, for indexPath: IndexPath) -> UITableViewCell
返回基类UITableViewCell
如果声明自定义(子)类,则必须将单元格强制转换为子类。顺便说一句,请给课程起一个大写字母。
let cell = tableView.dequeueReusableCell(withIdentifier: "Cell1", for: indexPath) as! c1
在configure
中,您可能必须返回Self
或c1
public func configure(indexPath: IndexPath) -> Self {
let place = places[indexPath.row]
self.textLabel?.text = place.name
self.detailTextLabel?.text = "\(place.timestamp)"
return self
}
places
从单元格哪里来? configure
方法似乎毫无意义。
答案 3 :(得分:0)
要访问UITableViewCell
的方法,必须将单元格强制转换为特定的UITableViewCell
即
let cell = tableView.dequeueReusableCell(withIdentifier: "YOUR_IDENTIFIER") as? YOUR_CELL_CLASS
如果您有多个UITableViewCell
,则必须分配一个不同的标识符,以便可以识别特定的单元格。或多或少应该有一个根据您的数据显示您的单元格的意识。
func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell {
let aCellType = aCellData[indexPath.row].cellType //aCellData is the predefined data
switch aCellType {
case c1:
let cell = tableView.dequeueReusableCell(withIdentifier: "YOUR_IDENTIFIER") as? YOUR_CELL_CLASS_C1
cell.YOUR_METHOD_OF_THIS_CELL()
return cell
case c2:
let cell = tableView.dequeueReusableCell(withIdentifier: "YOUR_IDENTIFIER") as? YOUR_CELL_CLASS_C2
cell.YOUR_METHOD_OF_THIS_CELL()
return cell
case c3:
let cell = tableView.dequeueReusableCell(withIdentifier: "YOUR_IDENTIFIER") as? YOUR_CELL_CLASS_C2
cell.YOUR_METHOD_OF_THIS_CELL()
return cell
default:
debugPrint("That's all folks")
}
return UITableViewCell()
}
希望这对您有帮助!