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

时间:2017-01-15 02:10:32

标签: ios uitableview

我有一个自定义的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)")

            }
        }

    }

}

1 个答案:

答案 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返回到单元格,然后从单元格获取索引。