了解Xcode UITableViewCell

时间:2019-05-02 09:17:02

标签: ios swift uitableview

我为原型单元格定义了一个名为c1的类,如下所示:

enter image description here

enter image description here

我这样定义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的子代,才能访问“配置”方法?

4 个答案:

答案 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中,您可能必须返回Selfc1

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()
}

希望这对您有帮助!