2017-07-25 8 views
0

unter Code soll Benutzernamen aus einem Array und Benutzer in der Lage sein, auf den gewünschten Benutzernamen tippen. Aufruf an dieses Array ist ein Erfolg und ich kann die Benutzernamen sehen, aber nicht in der Lage sein, darauf zuzugreifen. und es druckt nicht einmal "didSelectRowAt". schätze deine Hilfe. Vielen Dank.didSelectRowAt von benutzerdefinierten Zelle nichts tun

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

Haben Sie versucht, Ihren Code zu debuggen? fügen Sie einfach einen Haltepunkt in der 'didSelectRowAt' hinzu und überprüfen Sie, was passiert ... –

+0

Stellen Sie sicher, dass der Auswahlmodus der Tabelle nicht auf 'Keine Auswahl' eingestellt ist. –

+0

Ist dies ein' UITableViewController' oder ein 'UIViewController' mit einer hinzugefügten Tabelle? Wenn Letzteres, haben Sie den Delegat der Tabelle festgelegt? – rmaddy

Antwort

0

Checkliste

  1. Tableview Delegierten richtig eingestellt ist
  2. Tableview Auswahlmodus == Keine Auswahl, dann ändern Einzelauswahl
  3. Funktionsname ist korrekt func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell {
  4. verwenden Sie eine Tippgeste in dieser Ansicht? entfernen Sie es.
+0

ja getan, dass & Erfolg. Es scheint, als wäre es wegen der Tippgeste. Vielen Dank! – mclovin

0

Wenn Sie UITextView bearbeiten wird nicht rufen `didselectRowAt. Versuchen Sie, Your MentionUserCell, IndexPath in den Methoden von UITextView abzurufen und dort zu verarbeiten. Beispiel:

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 
} 

Ich hoffe, es wird Ihnen helfen.

0

Bei Verwendung von zwei oder mehr Zellen funktioniert die didSelectRow-Methode nicht gut. Sie können eine Schaltfläche in der Zelle verwenden.

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 

} 

Jetzt erhalten Sie die 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) 
}