在我的应用程序中,我有一个UITableView
,当用户点击"添加"时会动态创建新的单元格。按钮。我的单元格有几个用于输入用户的字段。但是,在创建第四个单元格后,该单元格包含在第一个单元格中添加的输入的副本。例如,假设每个单元格都有一个文本域
FirstCell.textfield.text = 0 <--- manually assigned
SecondCell.textfield.text = 1 <--- ..
ThirdCell.textfield.text = 2 <---- ..
FourthCell.textfield.text = 0 <--- automatically assigned
FifthCell.textfield.text = 1 <--- automatically assigned
经过一番挖掘后,我相信这是因为细胞使用重用标识符出列,并且细胞被重复使用。如何从同一原型创建多个单元格,但不自动保存上一个单元格中手动指定的值?
更新
func tableView(tableView: UITableView, cellForRowAtIndexPath indexPath: NSIndexPath) -> UITableViewCell {
let cell = tableView.dequeueReusableCellWithIdentifier("MyCustomCell", forIndexPath: indexPath) as! CustonUITableViewCellClass
cellB.delegate = self
return cell
}
我尝试根据indexPath.row在此函数中分配每个单元格的UI元素,但它似乎并没有起作用。在我添加4行后开始滚动之前它一直正常工作,第一行中的单元格将返回indexPath.row = 4,并且第一行中的所有UI元素将被分配给第四行输入的值。
答案 0 :(得分:0)
正如你所说,你的细胞正在被重复使用,这就是你体验这种奇怪行为的原因。您需要保留每个单元格的指定值,并在每次单元格在cellForRowAtIndexPath
中重复使用时清理/设置每个单元格。
由于你有一个textField,你可以使用委托来响应它的文本被更改并将该值保存在一个数组中,然后每次重用一个单元格时查找该值并进行设置。