在Xcode中,我可以在标识符检查器中定义一个自定义类,但是如何使用它们呢?以下示例:
class c1 : UITableViewCell {
func celltest() {
let i = 99;
}
}
class NicePlaceTableViewController: UITableViewController {
.
.
.
override func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell {
let cell = tableView.dequeueReusableCell(withIdentifier: "Cell1", for: indexPath)
**cell.celltest()** .. has no member celltest
let place = places[indexPath.row]
cell.textLabel?.text = place.name
cell.detailTextLabel?.text = "\(place.timestamp)"
return cell
}
如果将知道redirectIdentifier而不是其自定义类-在这种情况下为“ c1”-如何在不违反Xcodes编译检查的情况下访问类c1中定义的方法?
答案 0 :(得分:1)
您只需要强制将其转换为c1
:
let cell = tableView.dequeueReusableCell(withIdentifier: "Cell1", for: indexPath) as! c1
cell.celltest()
顺便说一句,c1
不是一个很好的类名。
答案 1 :(得分:1)
您只需要将单元格强制转换为c1
的对象。您可以通过在cellForRowAt
方法中编写如下代码来做到这一点:
let cell = tableView.dequeueReusableCell(withIdentifier: "Cell1", for: indexPath) as! c1
因此,编译器将知道您的自定义tableview单元格类的类型,而cell.celltest()
不会给您错误。
另一个关于swift样式指南的参考,可以极大地帮助您了解类名和方法名:
答案 2 :(得分:1)
我不知道类名“ c1”。有什么办法可以动态获得它吗?我不明白为什么单元格会被其replaceIdentifier“ cell1”查询,而xcode不知道应该指定哪个类的单元格? (c1)
答案 3 :(得分:1)
Xcode Interface Builder是用于可视化创建UI场景的IDE。
您对表格视图中的单元格的配置将实例化一个在表格视图中注册了c1单元格的NicePlaceTableViewController。
如果没有带有Interface Builder的Xcode工具,则必须按照以下方式以编程方式自行创建它:
class NicePlaceTableViewController: UITableViewController {
override func viewDidLoad() {
super.viewDidLoad()
tableView.register(c1.self, forCellReuseIdentifier: "Cell1")
}
}
此代码为给定的标识符注册一个类类型。要访问单元格,必须使用tableView.dequeueReusableCell方法,该方法将作用于内部池上以创建或重用单元格。
override func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell {
let cell = tableView.dequeueReusableCell(withIdentifier: "Cell1", for: indexPath)
}
已出队的单元格是UITableViewCell类型。如果要将其转换为c1类型,则必须使用!运算符。
let cell = tableView.dequeueReusableCell(withIdentifier: "Cell1", for: indexPath) as! c1