知道自定义的UITableViewCell里面的行号 – 新的皱纹

我有一个自定义的UITableViewCell类。

单元格有可编辑的UITextField。 当这个文本字段被编辑时,我陷入编辑结束

func textFieldDidEndEditing(_ textField: UITextField) 

我的自定义单元类实现了UITextFieldDelegate,所以我确实得到了callback。

类似于类似问题的所有其他答案 – 我首先尝试在加载表时将UITextField上的标记设置为行号。

这工作 – 但 – 现在有一个皱纹….我的表格允许行被移动。 当行被移动时,它保留了表格被加载时的标签,所以不是我的标签都从插入的下来。 我可以通过在移动之后重新加载表来解决这个问题,但是这样会将列表跳回顶端。

1)是否有一个更清晰的方式来获取自定义单元格类中的行号,而不使用.tag? 因为当我允许行被移动时失败。

2)如果没有#1,那么是否有办法继续前进,重新加载显示为抢先当前显示的行,然后表重新加载复位到当前最高当前行,所以用户不会跳回到顶部?

我也试图用这个

  func tableView(_ tableView: UITableView, didEndEditingRowAt indexPath: IndexPath?) 

并在包含UITableView的UIViewController中捕获编辑结束,所以编辑之后我会得到行号,但这永远不会被调用。 所以解决这个问题的另一种方法可能是强制didEndEditingRowAt被调用。 由于某种原因,这不会被调用。 即使我把顾客牢房的要求强加给编辑结束

 var textFieldHandle : UITextField? func textFieldDidBeginEditing(_ textField: UITextField) { print("editing field in cell") textFieldHandle = textField } func textFieldDidEndEditing(_ textField: UITextField) { print("done editing text field in cell with text -\(textField.text!)-") if textFieldHandle != nil { textFieldHandle?.endEditing(true) // force end editing so get table event - does not work if let index = textFieldHandle?.tag { if index >= 0 && index < quizListItems.count { // if we have a proper index then store back in answer array so we dont lose it quizListItems[index].text = textField.text! print("--set value at index \(index)") } } } } 

我做了这个….

 func textFieldDidEndEditing(_ textField: UITextField) { let cell: UITableViewCell = textField.superview as! UITableViewCell let textFieldIndexPath = tableView.indexPath(for: cell) if let index = textFieldIndexPath?.row { if index >= 0 && index < quizListItems.count { // Stuff the input textField value in to the array that loads the table quizListItems[index].text = textField.text! } } } 

注意:UITextFieldDelegate是在我的ViewController(包含UITableView)上,而不是在我的自定义UITableViewCell类

还有什么失败—尝试使用didSelectRow和didDeselectRow – 但这些永远不会被调用,因为UITextField吃点击。 在与didSelectpath组合,我试图禁用或使UITextField不接受用户操作,直到我点击到该字段。 这是一团糟。 出于某种原因,有尝试让didSelect和didDeselect中的单元格的错误。 把它拿出来

什么工作(上面的代码片段)—返回到textFieldDidEndEditing的UITextField委托方法,并向后工作到单元格以获取索引。 这工作,甚至在我连续工作,仍然工作。

这个path从UITextField获取到单元格,然后单元格获得索引。