Tastatur verschwinden lassen

  • Tastatur verschwinden lassen

    Moin zusammen,

    ich habe ein UITextView. Klick man drauf kommt ja die Tastatur hochgeschossen. Gibt es eine Möglichkeit auf der Tastatur ein Button einzublenden der die Tastatur wieder schließt?

    Bei "Return" das ganze schließen möchte ich nicht, weil ja umbrüche auch möglich sein sollen.

    Und das der Nutzer im View irgendwo klicken muss damit das ganze verschwindet ist ja auch nicht so schön.

    Oder übersehe ich hier etwas?

    Danke!
  • Bei einem UITextField kannst Du die Eingabe mit Return beenden lassen. Bei einem UITextView soll Return allerdings einen Zeilenumbruch in den Text einfügen.

    Wenn sich der ViewController in einem Navigation Controller befindet, dann ändere ich z.B. das rightBarButtonItem des UINavigationItem auf einen Done-Button, sobald der UITextView editiert wird. Ein Touch auf den Done-Button beendet dann die Eingabe im UITextView.

    Alternativ könntest Du einen inputAccessoryView für den UITextView verwenden, welcher dann über der Tastatur angezeigt wird.
  • Wenn man mal durch die Apple Apps schaut, gibt es scheinbar kein konsistentes Vorgehen: Safari blendet ein "Fertig" in der inputAccessoryView ein, in Mail kann man eine Swipe-Geste nach unten benutzen, standardmäßig gibt es auf dem iPhone keine Funktion und die Tastatur selber kannst Du nicht verändern - nur komplett ersetzen, sogenannte "custom keyboards".

    Ich würde möglichst lange am Standard bleiben und finde die Lösung per Swipe schon aus Platzgründen recht elegant. Selber habe ich allerdings eine Lösung zum "Tastatur verstecken" noch nicht implementiert ... und als Benutzer auch noch nie vermisst: Schließlich verschwindet die Tastatur ja, sobald die Eingabefelder den Fokus verlieren.

    Mattes
    Diese Seite bleibt aus technischen Gründen unbedruckt.
  • Ok. Ich denke ich baste dann irgendwie einen Button rein der die Tastatur schließt.

    Mein UITextView liegt unter der Tastatur zur hälfte. Wenn ich jetzt in dem TextView schreibe gelangt der Text ja irgendwann unter die Tastatur und man sieht nicht mehr was man tippt. Bisschen blöd.

    Muss ich hier gucken an welcher stelle sich der Cursor befindet und die Seite scrollen? Oder gibt es eine einfacherer Möglichkeit?
  • MyMattes schrieb:

    Bei dem Problem solltest Du die View beim Erscheinen / Verschwinden der Tastatur entsprechend ändern bzw. Scrollen. Dafür gibt es Notifications.
    Kleine Ergänzung: Mit dem folgenden (Objective-C) Code im UITextViewController hatte ich das seinerzeit mal gelöst ... Vielleicht nicht die eleganteste Lösung, aber sie funktionierte in einer kleinen Beispiel-App für meinen Sohn 2014 :D

    C-Quellcode

    1. - (void)viewDidLoad
    2. {
    3. NSNotificationCenter *nc = [NSNotificationCenter defaultCenter];
    4. // Observe the keyboard to adjust the textview's size
    5. [nc addObserver:self selector:@selector(keyboardWasShown:) name:UIKeyboardDidShowNotification object:nil];
    6. [nc addObserver:self selector:@selector(keyboardWillBeHidden:) name:UIKeyboardWillHideNotification object:nil];
    7. }
    8. - (void)keyboardWasShown:(NSNotification*)aNotification
    9. {
    10. // Adjust the view size as the textview would extend under a shown keyboard, affecting proper scrolling and text selection
    11. NSDictionary* info = [aNotification userInfo];
    12. CGSize kbSize = [[info objectForKey:UIKeyboardFrameBeginUserInfoKey] CGRectValue].size;
    13. UIInterfaceOrientation interfaceOrientation = [UIApplication sharedApplication].statusBarOrientation;
    14. CGFloat kbHeight = (interfaceOrientation == UIInterfaceOrientationPortrait) ? kbSize.height : kbSize.width;
    15. // Apple's solution changes the view's insets, still breaking the selection of text behind the keyboard
    16. CGRect frame = self.view.frame;
    17. frame.size.height -= kbHeight;
    18. self.view.frame = frame;
    19. }
    20. - (void)keyboardWillBeHidden:(NSNotification*)aNotification
    21. {
    22. // Reset the view size
    23. NSDictionary* info = [aNotification userInfo];
    24. CGSize kbSize = [[info objectForKey:UIKeyboardFrameBeginUserInfoKey] CGRectValue].size;
    25. UIInterfaceOrientation interfaceOrientation = [UIApplication sharedApplication].statusBarOrientation;
    26. CGFloat kbHeight = (interfaceOrientation == UIInterfaceOrientationPortrait) ? kbSize.height : kbSize.width;
    27. CGRect frame = self.view.frame;
    28. frame.size.height += kbHeight;
    29. self.view.frame = frame;
    30. }
    Alles anzeigen
    Der Ursprung lag irgendwo in SO, aber ich weiß nicht mehr, wo genau...

    Mattes
    Diese Seite bleibt aus technischen Gründen unbedruckt.