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!

War es hilfreich?

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];.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top