如何在tableView之外获取所有自定义tableview单元格的textField和textView值

时间:2018-12-11 10:24:09

标签: ios swift uitableview

我试图像这样从外部tableView访问自定义tableView单元格文本字段:

element.scrollIntoView({behavior: "smooth", block: "center", inline: "nearest"});

但是问题是以上方法,您只能获取tableView的可见单元格,除非单元格为nil。并且因为我为避免使用零单元格而进行保护,所以我没有获得所有文本字段值。

如果我这样移除警卫:

for i in 0..<NameCounter {
let indexPath = IndexPath(row: i, section: 0)
guard let cell = sampleTableView.cellForRow(at: indexPath) as? sampleCellView else{
    return
}
if let text = cell.txtName.text, !text.isEmpty {
   let value = text
   print("Getting NameText : \(value)")
}

if let text = cell.txtNote.text, !text.isEmpty {
    let value = text
    print("Getting noteText : \(value)")
}}

它将崩溃,并且有一些单元格为零。

如何从tableView外部访问所有文本字段值并获取所有单元格(单元格可能不为零)?

我有多个tableView,在每个tableView单元格中,我都放置txtName和txtNote。我想检测正在编辑的txtName和txtNote,因此可以放入正确的模型。

注意:txtName是文本字段,txtNote是textView

3 个答案:

答案 0 :(得分:1)

您不应依赖从单元格标签,文本字段等中获取的值。

一旦一个单元离开屏幕,它就会被扔到一个池中以备后用,甚至可能被释放。

您应该将view state保留在某个数组中,然后可以安全地在任何索引处获取任何值。

如果您有1000个单元,则在任何时候可能只显示10-20个单元,在可重复使用的单元池中大约40-50个单元可见。如果您位于索引路径第100行-显然,索引路径第150行之后的单元格将为nil

答案 1 :(得分:0)

作为一种好的标准做法,应该不需要从UITableViewCells获取值。您应该根据需要根据某些逻辑从UITableView中提供的模型中获取值。

此外,当需要访问在UITableViewCell上键入的任何文本时,应首先在关联的模型中对其进行更新,并应从那里进行访问。

在后台重复使用UITableViewCell,如果您从UITableView访问它,则只有当前可见的单元格才会向您显示实际数据。因此,可以将单元格的输入值持久保存到某个数组/字典中,以备后用。

答案 2 :(得分:0)

此返回

let cell = sampleTableView.cellForRow(at: indexPath) as! sampleCellView

对于表单元可重用的事实,任何不可见的单元格都会崩溃并崩溃,您需要保存用户为每个单元格键入的内容进行建模(tableView dataSource array),然后从中获取值

var model = [String]()

//在cellForRowAt内部

    cell.textView.delegate = self

    cell.textView.tag = indexPath.row
}
@objc func textViewDidChange(_ tex: UITextView) {


    model[tex.tag] = tex.text!

}

类VC:UIViewController,UITextViewDelegate {