Ci-dessous le code censé appeler les noms d'utilisateur à partir d'un tableau et l'utilisateur capable de taper sur le nom d'utilisateur souhaité. l'appel à ce tableau est un succès et je peux voir les noms d'utilisateur mais je ne peux pas y accéder. et il n'imprime même pas "didSelectRowAt". apprécier ton aide. Merci.

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
}
0
mclovin 25 juil. 2017 à 09:37

2 réponses

Lorsque vous utilisez deux cellules ou plus, la méthode didSelectRow ne fonctionne pas correctement. Vous pouvez utiliser un bouton dans la cellule.

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

}

Maintenant, vous obtenez l'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)
}
0
Arjun Yadav 25 juil. 2017 à 07:31

Si vous modifiez, UITextView ne pourra pas appeler `didselectRowAt. Essayez d'obtenir le Your MentionUserCell, IndexPath dans les méthodes de UITextView et gérez-le. Exemple:

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 
 }

J'espère que cela vous aidera.

0
Hai Nguyen 25 juil. 2017 à 06:51