2016-08-05 52 views
0

Ich habe eine Ansicht mit einem UITextField und einem UITableView. Während der Benutzer Text eingeben möchte ich die didSelectRowAtIndexPath aufgerufen werden, ist es leider nicht. Es scheint, dass der Fokus des Textfelds verhindert, dass der didSelectRowAtIndexPath aufgerufen wird.textFieldDidEndEditing vs didSelectRowAtIndexPath, die später nicht

Die erste Lösung, die ich gefunden habe, wäre eine Gestenerkenner zu erstellen und zu überprüfen, ob die Ereigniskoordinaten in der Tabelle sind, und dann in welcher Zeile zu überprüfen. Aber ich würde gerne eine einfachere Lösung machen, ich verpasse wahrscheinlich etwas.

Edit: das Textfeld ist nicht innerhalb der Zelle, ist außerhalb der Tabelle, Sie schlagen Antworten vor, als ob es in der Zelle ist.

+0

Ein kleiner Trick, würde in der UITextFieldDelegate (in 'textFieldShouldBeginEditing:'?) Methode, um die Super des UITextField erhalten, bis Sie die Zelle (je nach bekommen, wie die verwalte benutzerdefinierte Zelle), und nennen Sie sich 'tableView: didSelectRowAtIndexPath:'. – Larme

+0

pls fügen Sie einige relevante Codes hinzu, die Sie ausprobiert haben. –

+0

Die Frage ist nicht genug klar: das Textfeld ist nicht innerhalb der Zelle, ist außerhalb der Tabelle – AR89

Antwort

0

Setzen Sie in cellForRow das Tag des UITextField auf indexPath.row. Wenn Ihr Textfeld nun mit der Bearbeitung beginnt, haben Sie die Zeile des Indexpfads und können bei Bedarf die Zelle "ForRow" abrufen. Setzen Sie Ihre Funktionslogik "didSelectRowAtIndexPath" in eine separate Funktion und rufen Sie diese neue Funktion von didSelect und von initiatesEditing auf.

+2

Setzen Sie das Tag auf den 'indexPath.row' funktioniert nur, wenn Sie einen Abschnitt haben und die Zeilen sind behoben. – rmaddy

1

Wenn textFieldDidBeginEditing genannt wird, können Sie die Zellenzeile bekommen, es dann aber verwenden Sie müssen:

func textFieldDidBeginEditing(textField: UITextField) { 
    let currentCell = textField.superview!.superview! // Get the cell 
    let indexPath = tableView.indexPathForCell(currentCell) 
    let currentRow = (indexPath?.row)! // Get the row of that cell 
} 
+0

das Textfeld ist nicht in der Zelle, ist außerhalb der Tabelle – AR89

+0

@ AR89 Nicht klar von der Frage – Shades

+0

meine Schuld, tut mir leid – AR89

-1

schreiben Code in cellForRowAIndexPath Methode von uitableview.that von didSelectForRowAtIndexPath cslled Verfahren verhindern.

tableview.selectiostyle = UItableviewSelectionStayle.None