访问自定义单元格中的组件?

Accessing the components in a custom cell?

我有一个 table 使用自定义单元格,在自定义单元格中我有一个选择器和一个文本字段。

我有一个定制的 class 单元格,它有这些元素的出口。

在 table 的父级 VC 中,我希望能够引用文本字段的内容和选择器的值。

当这些值位于自定义单元格中而不是仅位于主 viewcontroller 视图中时,我如何访问这些值?

单元格代码:

    class NewExerciseTableViewCell: UITableViewCell {

    static let reuseIdentifier = "Cell"

    @IBOutlet weak var setNumber: UILabel!
    @IBOutlet weak var repsPicker: UIPickerView!
    @IBOutlet weak var userExerciseWeight: UITextField!

}

我试图通过创建 let setCell = NewExerciseTableViewCell() 来访问它,然后尝试通过其属性访问其内容组件,但这不是实现它的方法!

感谢任何有关如何提取此单元格中的值的帮助!

编辑:这是我的 callForRowAt

    func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell {
    guard let cell = tableView.dequeueReusableCell(withIdentifier: "Cell", for: indexPath) as? NewExerciseTableViewCell else {
        fatalError("Unexpected Index Path")
    }
    cell.backgroundColor = UIColor.customBackgroundGraphite()
    cell.textLabel?.textColor = UIColor.white
    return cell
}

这个问题包含多个部分,我会尽量一一解答。

1- 首先,如果您想设置值、属性等,您必须在 tableView(_:cellForRowAt:) 方法中进行设置。 (在故事板中设置 cellIdentifer。)

override func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell {
    let cell = tableView.dequeueReusableCell(withIdentifier: "cellIndetifier", for: indexPath) as! NewExerciseTableViewCell
    cell.setNumber.text = "1"
    ...
    return cell
}

2- 您不能仅通过创建一个新的子视图来访问单元格的子视图。那没有意义。使用 let cell = tableView.cellForRow(at: ...) 然后你有一个有效的 cell.setNumber

P.S。顺便说一句,setNumber 不是命名标签的好习惯。仅对 setter 方法使用 set

您需要使用自定义类型创建一个 UITableViewCell 对象。假设您正在创建一个 table 视图,那么您可以在 cellForRowAt 中添加单元格。参考以下代码

func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell {
        let cell = tableView.dequeueReusableCell(withIdentifier: "cell", for: indexPath) as! NewExerciseTableViewCell
        cell.setNumber.text = // Some Value
}

在上面的方法中,单元格现在是 NewExerciseTableViewCell 类型,您现在可以访问 class.

的任何 public 属性

如果您想获取特定单元格的值,则需要先获取该单元格。检查以下代码以供参考

let cell = yourTableView.cellForRowAtIndexPath(indexPath) as! NewExerciseTableViewCell
print(cell.setNumber.text)