我有一个TableView用于添加配方说明(步骤)。给出第一个单元格,用户可以根据需要添加更多单元格。 并且用户可以删除他们不需要的单元格。
每个单元格(行)配置有用于指令文本内容的UITextfield和用于标记指令顺序的UILabel。
可能的用例之一可能是用户在单元格中键入了一些文本并决定将其删除以重新开始。当用户按添加步骤按钮时,将向用户显示一个新单元格,但填写了之前的文本。
为了防止这种情况,我有cell.stepTextField.removeFromSuperview()
因此用户可以获得一个带有明文字段的单元格。
它有点有用但是当我玩很多可能的互动时,我得到了有趣的结果,如附带的截图。在该示例屏幕截图中,我丢失了第一个单元格中的指令,即使我没有删除此单元格。
如何确保用户每次都能获得干净的文本字段,而不会丢失其他单元格的文本?
我已经尝试了func tableView(tableView: UITableView, commitEditingStyle editingStyle: UITableViewCellEditingStyle, forRowAtIndexPath indexPath: NSIndexPath) {
if tableView == stepTableView {
if editingStyle == .Delete {
// Delete the row from the data source
if stepOrder.count > 1 {
let cell = self.stepTableView.cellForRowAtIndexPath(indexPath) as! StepCell?
cell!.stepTextField.text = ""
stepTableView.deleteRowsAtIndexPaths([indexPath], withRowAnimation: .Fade)
}
} else if editingStyle == .Insert {
// Create a new instance of the appropriate class, insert it into the array, and add a new row to the table view
}
}
}
但这将完全删除不是我想要的单元格的文本字段。
请注意,我没有在删除功能中对DataSource进行任何更新,因为我只在保存功能中获取了tableview的所有文本字段的值。
func tableView(tableView: UITableView, cellForRowAtIndexPath indexPath: NSIndexPath) -> UITableViewCell {
if tableView == self.stepTableView {
let aCell = tableView.dequeueReusableCellWithIdentifier("StepCell", forIndexPath: indexPath) as! StepCell
stepTextField = aCell.getTextField()
aCell.configureStepOrder(stepOrder[indexPath.row])
aCell.stepTextField.delegate = self
cell = aCell
}
}
(更新) cellForRowAtIndexPath
{{1}}
答案 0 :(得分:0)
你能做到你想做的最安全的方式是
对于文本更改,请确保实现所需的委托方法。
我希望这有帮助!