Swift 2.1 - 删除单元格后,在TableViewCell中清除文本字段

时间:2016-04-11 11:32:28

标签: ios objective-c swift xcode7

我有一个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}}

enter image description here

1 个答案:

答案 0 :(得分:0)

你能做到你想做的最安全的方式是

  1. 使用临时数组作为数据源。在显示表视图时创建已保存数组的副本。
  2. 始终将您对表视图所做的更改与临时数据源(插入,编辑,删除)同步。对于空单元格,数组中可以有一个空字符串。
  3. 如果要保存更改,只需将临时数组复制到保存的数组即可。一个简单的任务就可以了。
  4. 对于文本更改,请确保实现所需的委托方法。

    我希望这有帮助!