自定义单元格中的 didSelectRowAt 什么都不做

didSelectRowAt from custom cell do nothing

下面的代码应该从数组中调用用户名,并且用户能够点击所需的用户名。对该数组的调用是成功的,我可以看到用户名,但无法访问它。它甚至不打印 "didSelectRowAt"。感谢你的帮助。谢谢。

func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell
{
    let cell = tableView.dequeueReusableCell(withIdentifier: "cellIdentifier", for: indexPath) as! MentionUserCell

    cell.username!.text = autoComplete[indexPath.row]

    return cell
}

func tableView(_ tableView: UITableView, numberOfRowsInSection section: Int) -> Int
{
    return autoComplete.count
}



func numberOfSections(in tableView: UITableView) -> Int
{
    return 1
}


func tableView(_ tableView: UITableView, didSelectRowAt indexPath: IndexPath)
{

    let selectedCell: MentionUserCell = tableView.cellForRow(at: indexPath)! as! MentionUserCell
    let selectedWord: String = selectedCell.username!.text! + " "
    print("didSelectRowAt")
    var string: NSString = NSString(string: self.commentTextView.text!)
    string = string.replacingCharacters(in: otoCadang.sharedInstance.foundRange, with: selectedWord) as NSString

    // change text field value
    commentTextView.text = string as? String

    // change cursor position
    let positionOriginal = commentTextView.beginningOfDocument
    if let cursorLocation: UITextPosition = self.commentTextView.position(from: positionOriginal, offset: otoCadang.sharedInstance.foundRange.location + selectedWord.characters.count)
    {
        self.commentTextView.selectedTextRange = self.commentTextView.textRange(from: cursorLocation, to: cursorLocation)
    }



    // remove suggestion
    self.autoComplete.removeAll()
    self.tableView.reloadData()
    tableView.isHidden = true
}

如果您正在编辑 UITextView 将无法调用 `didselectRowAt。尝试在 UITextView 的方法中获取 Your MentionUserCell、IndexPath 并在那里进行处理。示例:

func textViewDidChange(_ textView: UITextView) {
     var parentView = textView as UIView
     while !(parentView is UITableViewCell) {
         parentView = parentView.superview!
      }
      if let cell: MentionUserCell = parentView as? MentionUserCell {
          if let indexPath = self.tableView.indexPath(for: cell) {
              let yourIndexPath = indexPath
          }
      }
      //your code 
 }

希望对您有所帮助。

当使用两个或多个单元格时,didSelectRow 方法无法正常工作。您可以在单元格中使用按钮。

func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell {

    let cell = tableView.dequeueReusableCell(withIdentifier: "cellIdentifierName", for: indexPath) as! MentionUserCell

    cell.username!.text = autoComplete[indexPath.row]


    let button = cell.viewWithTag(101) as! UIButton
    button.cellclick.addTarget(self, action: #selector(functionName(sender:)), for: .touchDown)
    return cell

}

现在你得到了 indexPath:-

func functionName(sender:UIButton)  {
    let buttonPosition:CGPoint = sender.convert(CGPoint.zero, to:self.tableview)
    let indexPath = self.tableview.indexPathForRow(at: buttonPosition)
    print(indexPath.row)
}

检查清单

  1. tableview 代理设置正确
  2. tableview选择模式==无选择,则改为单选
  3. 函数名称正确func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell {
  4. 您是否在此视图上使用了任何点击手势?删除它。