我试图像这样从外部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
答案 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 {