我有一个自定义的UITableViewCell类。
单元格具有可编辑的UITextField。编辑此文本字段时,我将编辑结束录入
func textFieldDidEndEditing(_ textField: UITextField)
我的自定义单元格类实现了UITextFieldDelegate,所以我确实收到了回调。
与类似问题的所有其他回复类似 - 我首先尝试在加载表时将UITextField上的标记设置为行号。
这有效 - 但是 - 现在有皱纹....我的桌子可以移动行。移动行时,它会保留表格加载时的标记,因此我的标记不会从插入时关闭。我可以通过在移动后重新加载表来解决这个问题 - 但是这会将列表跳回到顶部。
1)是否有一种更简洁的方法来获取自定义单元格类中的行号而不使用.tag?因为当我允许移动行时,这会失败。
2)如果没有到#1那么有没有办法继续并重新加载显示器,首先抓住当前顶部显示的行,然后在表重新加载重置到同一个当前最高行,这样用户就不会跳回到顶部?
我也尝试过使用这个
func tableView(_ tableView: UITableView, didEndEditingRowAt indexPath: IndexPath?)
并在包含UITableView的UIViewController内捕获编辑结束,因此在编辑 BUT 之后我会得到行号,这永远不会被调用。所以解决这个问题的另一种方法可能是强迫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)")
}
}
}
}
答案 0 :(得分:0)
我这样做了....
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吃了点击。在使用didSelect路径的组合中,我尝试禁用或使UITextField不接受用户操作,直到我单击该字段。这是一团糟。由于某种原因,尝试将单元格置于didSelect和didDeselect内部时出现错误。把它拿回去了
什么有效(上面的代码片段)--- 返回到textFieldDidEndEditing的UITextField委托方法,并向后工作以获取索引。即使在我移动一行时,这仍然有效。
此路径从UITextField返回到单元格,然后从单元格获取索引。