didSelectRow来自自定义单元格什么都不做

时间:2017-07-25 06:37:50

标签: swift uitableview custom-cell didselectrowatindexpath

下面的代码应该从一个数组调用用户名,用户可以点击所需的用户名。调用该数组是成功的,我可以看到用户名但无法使用它。它甚至不打印“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
}

3 个答案:

答案 0 :(得分:0)

如果您正在编辑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 
 }

希望它会对你有所帮助。

答案 1 :(得分:0)

当使用两个或更多个单元格时,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)
}

答案 2 :(得分:0)

核对清单

  1. tableview委托设置正确
  2. tableview选择模式==无选择,然后更改为单选
  3. 功能名称正确@Configuration public class H2Config { @Bean public DataSource dataSource(DataSourceProperties properties) { return new EmbeddedDatabaseBuilder().setType(EmbeddedDatabaseType.H2).build(); } }
  4. 你在这个视图上使用任何轻击手势吗?删除它。