使用情节提要中定义的自定义类

时间:2019-06-02 08:58:24

标签: swift xcode uitableview uikit

在Xcode中,我可以在标识符检查器中定义一个自定义类,但是如何使用它们呢?以下示例:

enter image description here

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中定义的方法?

4 个答案:

答案 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样式指南的参考,可以极大地帮助您了解类名和方法名:

https://github.com/raywenderlich/swift-style-guide

答案 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