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

时间:2017-03-12 12:40:15

标签: ios swift uitableview tableviewcell

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

我有一个自定义类,用于具有这些元素插座的单元格。

在表格的父VC中,我希望能够引用文本字段的contensts和选择器的值。

如果这些值位于自定义单元格中而不是仅在主视图控制器视图上,我如何获取这些值?

细胞代码:

    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
}

2 个答案:

答案 0 :(得分:0)

这个问题包含多个部分,我将尝试逐一解决。

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不是命名标签的好方法。仅对set方法使用setter

答案 1 :(得分:0)

您需要使用自定义类型的类型创建UITableViewCell的对象。假设您正在制作表格视图,然后您可以在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类型,您现在可以访问该类的任何公共属性。

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

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