使用自定义 Table 查看单元格检测用户所在的单元格

Detect Which Cell a User is in With Custom Table View Cell

我有一个带有两 (2) 个文本视图的自定义 tableViewCell 供用户输入。我想检测用户所在的 tableView 行。我试过:

let currentIndexPath = tableView.indexPathForSelectedRow!

let currentCell = tableView.cellForRowAtIndexPath(currentIndexPath) as! Test2TableViewCell

和 Xcode 给我错误,fatal error: unexpectedly found nil while unwrapping an Optional value 对我来说,这意味着该应用程序无法找到选定的行。我假设当用户在 tableViewCell 顶部的 textView 中键入时,应用程序看不到您点击实际的单元格。 有没有办法检测用户在哪一行?

考虑使用出现在所有 UIView 子类上的标签 属性。

internal func tableView(tableView: UITableView, cellForRowAtIndexPath indexPath: NSIndexPath) -> UITableViewCell {
    if let cell:CustomCell = tableView.dequeueReusableCellWithIdentifier("CustomCell"){
         cell.textView.tag = indexPath.row

    }
}

internal func textViewDidBeginEditing(textView: UITextView){
    let row = textView.tag
}

您说得对,当您在单元格中键入 UITextField 时,单元格没有被选中。

完成此操作的一种快速方法是将行保存为 UITextView 的标记,然后在 textViewDidFinish... 委托方法中创建索引路径,并将该部分和标记作为行。

或者,您可以为每个唯一的 textView 创建一个变量,然后通过比较两者来比较您在 textViewDidFinish 委托方法中使用的 textView。

您可以使用块在您的 cellForRow 方法中检查它:

internal func tableView(tableView: UITableView, cellForRowAtIndexPath indexPath: NSIndexPath) -> UITableViewCell {
    if let cell:CustomCell = tableView.dequeueReusableCellWithIdentifier("CustomCell"){
         cell.editingDidBeginHandler = { [self weak], text
            //do your stuff, save index path, or tag or something else.
        }

    }
}

在您的 UITableViewCell 子类中:

var editingDidBeginHandler:(()->())?

internal func textViewDidBeginEditing(textView: UITextView){
    if let handler = editingDidBeginHandler { editingDidBeginHandler() }
}

您可以将 textView 点转换为 table 视图点以确定其索引路径。

func textViewDidBeginEditing(textView: UITextView) {
    let pointInTable = textView.convertPoint(textView.bounds.origin, toView: yourTableView)
    let textViewIndexPath = yourTableView.indexPathForRowAtPoint(pointInTable)
    // do something else
}

这是假设您将文本视图委托设置为 table 视图。

如果将文本视图委托设置为自定义单元格,则需要在自定义单元格中捕获 textViewDidBeginEditing 函数,然后使用协议将事件传递给 table 视图。