Wie scrollen Sie nach oben, wenn die Tastatur erscheint?
Ich weiß, dass diese Frage wieder und wieder gestellt, aber nichts scheint zu funktionieren für mich. Die meisten Lösungen, um Recht out of date, und der rest sind unglaublich riesige code-Blöcke, die zehn mal größer sind dann die eigentlichen Projekte Codierung. Ich habe ein paar UITextFields aufgereiht vertikal, aber wenn die Tastatur startet zu Bearbeiten, es deckt das text-Feld. Ich Frage mich, ob es eine einfache Anfänger-Weise zu scrollen, der Blick nach oben und dann wieder zurück, wenn die Bearbeitung beginnt und endet?
Danke.
Kommentar zu dem Problem - Öffnen
möglich, Duplikat der Wie man ein UITextField bewegen, wenn Tastatur vorhanden ist
InformationsquelleAutor der Frage John | 2012-01-02
Du musst angemeldet sein, um einen Kommentar abzugeben.
Ich haben gemacht Lösungen, die die Arbeit mit scroll-und nicht-scroll-views mit Tastatur-Benachrichtigung und eine Erkennung der aktuellen first-responder, aber manchmal benutze ich diese triviale Lösung, statt: Der einfache Weg ist, zu erkennen, das öffnen der Tastatur über das text-Feld Delegierten
textViewDidBeginEditing:
Methode und verschieben Sie die gesamte Ansicht. Der einfachste Weg dies zu tun ist, mit etwas entlang der Linien zu ändernself.view.bounds.origin.y
auf -100 (oder was auch immer). Verwenden Sie den entsprechendentextViewShouldEndEditing:
Methode, um es an der gegenüberliegenden, die 100 in diesem Fall. Ändernbounds
ist ein relatives Verfahren. Nach der änderung ist der Rahmen bewegt wird, aber die Grenzen der Ursprung ist immer noch null.InformationsquelleAutor der Antwort Peter DeWeese
Da ich habe es gefunden, ich benutze TPKeyboardAvoiding - https://github.com/michaeltyson/TPKeyboardAvoiding.
Es funktioniert Super, und ist sehr einfach einzurichten:
UIScrollView
in Ihrer view-controller - xibTPKeyboardAvoidingScrollView
(noch in der xib, über den identity inspector)Können Sie auch erstellen Sie programmgesteuert, wenn Sie wollen.
Es ist eine Klasse, die innerhalb einer
UITableViewController
; es ist nur erforderlich, im Falle Sie unterstützen eine iOS-version unter 4.3.InformationsquelleAutor der Antwort Guillaume
@BenLu und anderen Nutzern, die konfrontiert sind problem der Funktion nie aufgerufen wird, weil der folgenden Gründen:
Als die Delegierten inbuild-Funktion bydefaults void zurück, anstatt BOOL dies ist, wie es sein sollte, wie folgt:
InformationsquelleAutor der Antwort Niranjan Balkrishna Prajapati
Verbrachte ich irgendwann auf dieses problem und versammelten Stücke-code zum erstellen einer endgültigen Lösung. Mein problem wurde im Zusammenhang mit der UITableView scrollen und Tastatur öffnen/schließen.
Benötigen Sie zwei partielle Methoden in Ihrer Zelle-Klasse:
und dann in Ihrer view-controller-Klasse:
InformationsquelleAutor der Antwort U. Ali
Wenn Sie eine
UITableView
oder eineUIScrollView
es ist besser, ändern Sie die Werte fürcontentOffset
anstatt änderungen an derframe
.Arbeiten auf Peter ' s Antwort, fügen Sie diese Methode, um Ihre Klasse funktioniert gut:
Das war ' s, keine Notwendigkeit zum hinzufügen von
textViewDidEndEditing
Methode.Sollte ich nicht brauchen, dies zu sagen, aber für diese Arbeit, die Ihr
UITextField
oderUITextView
muss ein Delegierter des Controllers.InformationsquelleAutor der Antwort Sheharyar
Beginnend mit Peter ' s Antwort, entwickelte ich das folgende Konzept in Swift 3.0 unter iOS 10.1. Ich mache das für eine textView, also ich habe implementiert die UITextViewDelegate Funktionen textViewDidBeginEditing und textViewDidEndEditing wo ich das einstellen der Ansicht Grenzen. Wie Sie sehen können, habe ich den Ursprung Y-Wert, um eine kleine positive Zahl ist nach oben scrollen und dann wieder auf 0 zurück an die ursprüngliche position.
Hier ist der relevante code aus meiner ViewController. Sie brauchen nicht zu animieren, aber es fügt eine nette Geste.
InformationsquelleAutor der Antwort Mario Hendricks
ich habe eine scrollview und 3 text-Felder. Ich habe einen einfachen code, der aus meiner eigenen Anwendung :
.h-Datei :
.m-Datei :
InformationsquelleAutor der Antwort Rakesh