Ios 使用自定义表格视图单元格检测用户所在的单元格

Ios 使用自定义表格视图单元格检测用户所在的单元格,ios,swift,uitableview,nsindexpath,Ios,Swift,Uitableview,Nsindexpath,我有一个自定义tableViewCell,其中有两(2)个文本视图供用户输入。我想检测用户所在的tableView行。我试过: let currentIndexPath = tableView.indexPathForSelectedRow! let currentCell = tableView.cellForRowAtIndexPath(currentIndexPath) as! Test2TableViewCell Xcode给了我一个错误,fatal error:unwrapping

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

let currentIndexPath = tableView.indexPathForSelectedRow!

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

Xcode给了我一个错误,
fatal error:unwrapping一个可选值时意外发现nil
,对我来说,这意味着应用程序找不到所选行。我假设当用户在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
}

考虑使用所有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
delegate方法中使用的textView

关于在单元格中键入UITextField时未选中单元格的说法是正确的

实现这一点的一种快速方法是将行保存为UITextView的标记,然后在
textViewDidFinish
中。。。委托方法创建以节和标记作为行的索引路径


或者,您可以为每个唯一的textView创建一个变量,然后通过比较这两个变量来比较在
textViewDidFinish
delegate方法中使用的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() }
}

您可以使用块在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点转换为表视图点以确定其索引路径

func textViewDidBeginEditing(textView: UITextView) {
    let pointInTable = textView.convertPoint(textView.bounds.origin, toView: yourTableView)
    let textViewIndexPath = yourTableView.indexPathForRowAtPoint(pointInTable)
    // do something else
}
这是假设您将文本视图委托设置为表视图


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

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

func textViewDidBeginEditing(textView: UITextView) {
    let pointInTable = textView.convertPoint(textView.bounds.origin, toView: yourTableView)
    let textViewIndexPath = yourTableView.indexPathForRowAtPoint(pointInTable)
    // do something else
}
这是假设您将文本视图委托设置为表视图


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

此代码是在单元格类中还是在tableview类中?此代码在my tableview类@Paulw11I中。我建议您在tableviewcell类中添加一个包含对与之相关的数据模型对象,并将UITextViewDelegate方法移动到tableviewcell类中。然后,实现一个协议,该协议允许单元格通知视图控制器文本已更改或其他任何内容。视图控制器可以直接从单元格访问数据模型属性,不需要知道行号。如果表可以重新排序(删除、插入或移动行),则存储行号很麻烦此代码是在cell类中还是在tableview类中?此代码在my tableview类@Paulw11I中。我建议您向tableviewcell类添加一个属性,该属性包含对与其相关的数据模型对象的引用,并将UITextViewDelegate方法移动到tableviewcell类中。然后,实现一个协议,该协议允许单元格通知视图控制器文本已更改或其他任何内容。视图控制器可以直接从单元格访问数据模型属性,不需要知道行号。如果表格可以重新排序(删除、插入或移动行),存储行号会很麻烦。谢谢您的帮助,Alex!现在我想得更多了,我不能用我发布的问题,因为我的最终目标需要其他东西。如果你有时间,请看我刚刚在这里发布的新问题:。我感谢你的帮助!谢谢你的帮助,亚历克斯!现在我想得更多了,我不能用我发布的问题,因为我的最终目标需要其他东西。如果你有时间,请看我刚刚在这里发布的新问题:。我感谢你的帮助!谢谢你的帮助,亚历克斯!现在我想得更多了,我不能用我发布的问题,因为我的最终目标需要其他东西。如果你有时间,请看我刚刚在这里发布的新问题:。我感谢你的帮助!谢谢你的帮助,亚历克斯!现在我想得更多了,我不能用我发布的问题,因为我的最终目标需要其他东西。如果你有时间,请看我刚刚在这里发布的新问题:。我感谢你的帮助!谢谢你的帮助,亚历克斯!现在我想得更多了,我不能用我发布的问题,因为我的最终目标需要其他东西。如果你有时间,请看我刚刚在这里发布的新问题:。我感谢你的帮助!谢谢你的帮助,亚历克斯!现在我想得更多了,我不能用我发布的问题,因为我的最终目标需要其他东西。如果你有时间,请看我刚刚在这里发布的新问题:。我感谢你的帮助!谢谢你的帮助,亚历克斯!现在我想得更多了,我不能用我发布的问题,因为我的最终目标需要其他东西。如果你有时间,请看我刚刚在这里发布的新问题:。我感谢你的帮助!谢谢你的帮助,亚历克斯!现在我想得更多了,我不能用我发布的问题,因为我的最终目标需要其他东西。如果你有时间,请看我刚刚在这里发布的新问题:。我感谢你的帮助!