WerdenErsterResponder:Scrollen Sie automatisch zum UIControl, das zum Ersthelfer wird
-
15-11-2019 - |
Frage
Ich habe eine Gruppe UITableViewController
mit einem Abschnitt und vielen Reihen.Jede cell
besteht aus zwei Elementen:A UILabel
mit einer Beschreibung und a UITextField
für eine Eingabe.Eine Form, würde ich sagen.
Unten befindet sich eine Schaltfläche „Weiter“, mit der Sie zur nächsten Ansicht gelangen.Aber vorher validiere ich das UITextField
'S:Wenn der Benutzer ein Feld nicht ausgefüllt hat, sollte dieses Feld den Fokus erhalten, damit der Benutzer sieht, dass er etwas eingeben muss.Ich habe es damit versucht:
[inputField becomeFirstResponder];
Denken Sie daran, der Knopf, den ich gedrückt habe, ist auf der Unterseite Meiner Meinung nach und stelle mir vor, dass die UITextField
Ist an der Spitze.In dieser Situation erhält das Feld nicht den Fokus, weil es zu weit entfernt ist.Wenn ich jetzt langsam nach oben scrolle und das Feld sichtbar wird, wird das Feld zum Ersthelfer und erhält den Cursor :-) Fazit:Der becomeFirstResponder
Hat funktioniert, macht aber nicht genau das, was ich wollte.Ich möchte nicht mit dem Finger nach oben scrollen, das Feld sollte automatisch fokussiert und sichtbar sein.
Gibt es eine Möglichkeit, direkt zu meinem Feld zu „springen“?Verwenden Sie eine Alternative zu becomeFirstResponder
?Automatisch zu meinem Feld scrollen?
Vielen Dank für Ihre Hilfe!
Lösung
Wenn Sie den Index der Zelle mit dem UITextField kennen, das Sie bearbeiten möchten, verwenden Sie
NSIndexPath* indexPath = [[NSIndexPath indexPathWithIndex:your_section_index] indexPathByAddingIndex:your_cell_index];
[tableView scrollToRowAtIndexPath:indexPath atScrollPosition:UITableViewScrollPositionBottom animated:YES]
bevor Sie anrufen becomeFirstResponder
.
Wenn die Zelle nicht auf dem Bildschirm angezeigt wird, kann es bei einigen iOS-Versionen zu Fehlern bei „bewerbeFirstResponder“ kommen.Darüber hinaus führen einige Versionen in manchen Situationen einen zusätzlichen Bildlauf in der Tabellenansicht durch (z. B.wenn Apples Code feststellt, dass der Responder ohne weiteres Scrollen immer noch außerhalb des Bildschirms wäre).Um diese Probleme zu umgehen, müssen Sie möglicherweise nach Abschluss der Scroll-Animation einen Ersthelfer anrufen.
Andere Tipps
Ich hätte das gleiche Problem. Dies liegt daran, dass die UIAnimation für die beiden Aufgaben gleichzeitig ausgeführt wird.Während also die UIAnimation für scrollToRowAtIndexPath den getsFirstResponder ignoriert.
Die Lösung könnte sein Deaktivieren Sie den Animationseffekt ODER sonst mit der performSelector:@selector(becomeFirstResponder) withObject:nil afterDelay:1.0f];
.