Cover per tastiera per iPhone UITextField


120

Ho un'app in cui, in Interface Builder , ho impostato UIViewun campo di testo nella parte inferiore della vista. Quando eseguo l'app e provo a inserire del testo in quel campo, la tastiera scorre sopra il campo, quindi non posso vedere cosa sto digitando finché non nascondo di nuovo la tastiera.

Qualcun altro si è imbattuto in questo problema e ha trovato un buon modo per risolverlo senza rendere scorrevole la vista genitore o spostare il campo di testo più in alto sullo schermo?


Risposte:


290

La solita soluzione è far scorrere il campo (e tutto ciò che si trova al di sopra) con un'animazione, quindi tornare indietro quando hai finito. Potrebbe essere necessario inserire il campo di testo e alcuni degli altri elementi in un'altra visualizzazione e far scorrere la visualizzazione come un'unità. (Io chiamo queste cose "placche" come in "placche tettoniche", ma sono solo io). Ma ecco l'idea generale se non hai bisogno di essere fantasioso.

- (void)textFieldDidBeginEditing:(UITextField *)textField
{
    [self animateTextField: textField up: YES];
}


- (void)textFieldDidEndEditing:(UITextField *)textField
{
    [self animateTextField: textField up: NO];
}

- (void) animateTextField: (UITextField*) textField up: (BOOL) up
{
    const int movementDistance = 80; // tweak as needed
    const float movementDuration = 0.3f; // tweak as needed

    int movement = (up ? -movementDistance : movementDistance);

    [UIView beginAnimations: @"anim" context: nil];
    [UIView setAnimationBeginsFromCurrentState: YES];
    [UIView setAnimationDuration: movementDuration];
    self.view.frame = CGRectOffset(self.view.frame, 0, movement);
    [UIView commitAnimations];
}

12
Adoro il fatto che non hai pubblicato un collegamento al codice, ma il codice stesso.
Ben Coffman

2
Un bel pezzo di codice. Non ho dovuto modificarlo perché funzionasse o altro. Grazie ~
James

5
È utile per coprire tutto lo schermo come di seguito: const int movementDistance = textField.frame.origin.y / 2; // modifica secondo necessità
conecon

3
Devo menzionare che "Se stai scrivendo un'applicazione per iOS 4 o versioni successive, dovresti invece utilizzare i metodi basati su blocchi per animare i tuoi contenuti". Citato da: developer.apple.com/library/ios/#documentation/windowsviews/…
Mathieu

1
Trovato questo e discute lo stesso problema developer.apple.com/Library/ios/documentation/StringsTextFonts/…
unom

38

Questo ha funzionato a meraviglia per me scorrevole uitextfields

In particolare ha il vantaggio di calcolare la distanza dell'animazione della diapositiva in base alla posizione del campo di testo.


Questo è fantastico. Non devi scegliere una costante di "distanza di movimento" per ogni campo di testo: è calcolato per te.
jlstrecker

La migliore soluzione in assoluto. Meccanismo fenomenale!
Marchy

1
Funziona alla grande anche su iPad. Ho appena aggiornato PORTRAIT_KEYBOARD_HEIGHT = 264 e LANDSCAPE_KEYBOARD_HEIGHT = 352. Ottimo collegamento. Grazie.
Khon Lieu

Il link sopra ha appena reso la mia giornata! Così semplice da implementare, finora funziona perfettamente!
JimmyJammed

1
Questa è la migliore spiegazione disponibile su questo argomento. Altri tutorial utilizzano le viste tabella, le viste a scorrimento, ecc. Funziona effettivamente senza entrare in altre complessità, chiare e semplici. Grazie per aver condiviso questa fonte.
Renexandro

28

IQKeyboardManager lo fa per te SENZA LINEA DI CODICE , devi solo trascinare e rilasciare il file sorgente correlato al progetto. IQKeyboardManager supporta anche l' orientamento del dispositivo , la gestione automatica della barra degli strumenti UIT , keyboardDistanceFromTextField e molto altro di quanto pensi.

inserisci qui la descrizione dell'immagine

Ecco il diagramma di flusso di controllo: Diagramma di flusso di controllo

Fase 1: - Aggiunta notifiche globali di UITextField, UITextViewe UIKeyboardin una classe Singleton. L'ho chiamato IQKeyboardManager .

Fase 2: - Se trovato UIKeyboardWillShowNotification, UITextFieldTextDidBeginEditingNotificationo UITextViewTextDidBeginEditingNotificationle notifiche, quindi cercare di ottenere topMostViewControlleresempio dalla UIWindow.rootViewControllergerarchia. Per correttamente uncover UITextField/ UITextViewsu di esso, topMostViewController.view's telaio deve essere regolata.

Fase 3: - Distanza di movimento prevista calcolata topMostViewController.viewrispetto alla prima risposta UITextField/ UITextView.

Step4: - Spostato topMostViewController.view.framesu / giù in base alla distanza di movimento prevista.

Fase 5: - Se trovato UIKeyboardWillHideNotification, UITextFieldTextDidEndEditingNotificationo UITextViewTextDidEndEditingNotificationla notifica, poi di nuovo cercare di ottenere topMostViewControlleresempio dalla UIWindow.rootViewControllergerarchia.

Step6: - Distanza disturbata calcolata topMostViewController.viewche deve essere ripristinata nella sua posizione originale.

Step7: - Ripristinato topMostViewController.view.framein base alla distanza disturbata.

Passaggio 8: - Istanza della classe IQKeyboardManager singleton istanziata al caricamento dell'app, quindi ogni UITextField/ UITextViewnell'app verrà regolata automaticamente in base alla distanza di spostamento prevista.

È tutto


La risposta accettata non funzionava per me. Ma questo lo fa.
studente

@ZaEeMZaFaR IQKeyboardManager è ottimizzato anche per iPad. Puoi aprire un problema sul repository GitHub della libreria e caricare un progetto demo che dimostri il problema con iPad?
Mohd Iftekhar Qurashi,

Grazie per la risposta. Lo farò se il problema persiste, prima di commentare stavo pensando che IQKeyboardManager non è per dispositivo universale.
ZaEeM ZaFaR

Investigando di più, funziona bene con l'iPad sul simulatore ma non sul dispositivo iPad effettivo. Funziona perfettamente anche su iPhone (dispositivo + simulatore). Quale potrebbe essere il problema?
ZaEeM ZaFaR

Come ho detto in precedenza, dovresti sollevare un problema sul repository GitHub con il progetto demo con i dettagli della versione di iOS e del dispositivo, in modo che possiamo esaminare il problema.
Mohd Iftekhar Qurashi,

7

Per espandere la risposta di Amagrammer, ecco una classe di esempio:

LoginViewController.h

@interface LoginViewController : UIViewController <UITextFieldDelegate> {

}

@property (nonatomic, retain) IBOutlet UITextField    *emailTextField;
@property (nonatomic, retain) IBOutlet UITextField    *passwordTextField;

Notare che stiamo implementando "UITextFieldDelegate"

LoginViewController.m

@implementation LoginViewController
@synthesize emailTextField=_emailTextField;
@synthesize passwordTextField=_passwordTextField;

- (id)initWithNibName:(NSString *)nibNameOrNil bundle:(NSBundle *)nibBundleOrNil
{
    self = [super initWithNibName:nibNameOrNil bundle:nibBundleOrNil];
    if (self) {
        //Register to receive an update when the app goes into the backround
        //It will call our "appEnteredBackground method
        [[NSNotificationCenter defaultCenter] addObserver:self
                                             selector:@selector(appEnteredBackground)
                                                 name:UIApplicationDidEnterBackgroundNotification
                                               object:nil];
    }
    return self;
}


- (void) animateTextField: (UITextField*) textField up: (BOOL) up
{
    const int movementDistance = 80; // tweak as needed
    const float movementDuration = 0.3f; // tweak as needed

    int movement = (up ? -movementDistance : movementDistance);

    [UIView beginAnimations: @"anim" context: nil];
    [UIView setAnimationBeginsFromCurrentState: YES];
    [UIView setAnimationDuration: movementDuration];
    self.view.frame = CGRectOffset(self.view.frame, 0, movement);
    [UIView commitAnimations];
}

- (void)textFieldDidBeginEditing:(UITextField *)textField
{
    [self animateTextField: textField up: YES];
}


- (void)textFieldDidEndEditing:(UITextField *)textField
{
    [self animateTextField: textField up: NO];
}

- (BOOL)textFieldShouldReturn:(UITextField *)textField
{
    [textField resignFirstResponder];
    return YES;
}
//This is called when the app goes into the background.
//We must reset the responder because animations will not be saved
- (void)appEnteredBackground{
    [self.emailTextField resignFirstResponder];
    [self.passwordTextField resignFirstResponder];
}

+1 per la menzione UIApplicationDidEnterBackgroundNotification, altrimenti si sposterà più verso il basso se si preme il pulsante Home e si torna nell'app, rendendolo brutto e pieno di bug.
Adil Soomro

7

Che ne dici della soluzione ufficiale: spostare i contenuti che si trovano sotto la tastiera

La regolazione del contenuto in genere comporta il ridimensionamento temporaneo di una o più visualizzazioni e il loro posizionamento in modo che l'oggetto di testo rimanga visibile. Il modo più semplice per gestire gli oggetti di testo con la tastiera è incorporarli in un oggetto UIScrollView (o in una delle sue sottoclassi come UITableView). Quando viene visualizzata la tastiera, tutto ciò che devi fare è reimpostare l'area del contenuto della visualizzazione a scorrimento e far scorrere l'oggetto di testo desiderato in posizione. Pertanto, in risposta a un UIKeyboardDidShowNotification, il metodo del gestore eseguirà le seguenti operazioni:

  1. Ottieni le dimensioni della tastiera.
  2. Regola la parte inferiore del contenuto della visualizzazione a scorrimento in base all'altezza della tastiera.
  3. Scorri il campo di testo di destinazione per visualizzarlo.
// Call this method somewhere in your view controller setup code.
- (void)registerForKeyboardNotifications
{
    [[NSNotificationCenter defaultCenter] addObserver:self
            selector:@selector(keyboardWasShown:)
            name:UIKeyboardDidShowNotification object:nil];

   [[NSNotificationCenter defaultCenter] addObserver:self
             selector:@selector(keyboardWillBeHidden:)
             name:UIKeyboardWillHideNotification object:nil];

}

// Called when the UIKeyboardDidShowNotification is sent.
- (void)keyboardWasShown:(NSNotification*)aNotification
{
    NSDictionary* info = [aNotification userInfo];
    CGSize kbSize = [[info objectForKey:UIKeyboardFrameBeginUserInfoKey] CGRectValue].size;

    UIEdgeInsets contentInsets = UIEdgeInsetsMake(0.0, 0.0, kbSize.height, 0.0);
    scrollView.contentInset = contentInsets;
    scrollView.scrollIndicatorInsets = contentInsets;

    // If active text field is hidden by keyboard, scroll it so it's visible
    // Your app might not need or want this behavior.
    CGRect aRect = self.view.frame;
    aRect.size.height -= kbSize.height;
    if (!CGRectContainsPoint(aRect, activeField.frame.origin) ) {
        [self.scrollView scrollRectToVisible:activeField.frame animated:YES];
    }
}

// Called when the UIKeyboardWillHideNotification is sent
- (void)keyboardWillBeHidden:(NSNotification*)aNotification
{
    UIEdgeInsets contentInsets = UIEdgeInsetsZero;
    scrollView.contentInset = contentInsets;
    scrollView.scrollIndicatorInsets = contentInsets;
}

Questa soluzione ufficiale è ora avvolto in un controllo vedi qui: - stackoverflow.com/a/17707094/1582217
Mohd Iftekhar Qurashi

Idea è buona, ma la proprietà 'contentInset' non aiuta qui, coz contentInset sarà solo fornire l'effetto padding: stackoverflow.com/a/10049782/260665
Raj Pawan Gumdal

@ Raj, potrebbe essere il caso che posso guardare su IQKeyboardManager, ma ancora nessuno apre alcun problema sul repository github IQKeyboardManager ufficiale per quanto riguarda il problema della proprietà contentInset, quindi presumo che funzioni.
Mohd Iftekhar Qurashi

7

Ho affrontato lo stesso problema nelle UITableView celle textField. Risolvo questo problema implementando il seguente metodo per ascoltare la notifica della tastiera.

Osservatore per le notifiche qui:

[[NSNotificationCenter defaultCenter]addObserver:self selector:@selector(keyboardWasShown:) name:UIKeyboardWillShowNotification object:nil];
[[NSNotificationCenter defaultCenter]addObserver:self selector:@selector(keyboardWillBeHidden:) name:UIKeyboardWillHideNotification object:nil];

Gestisci quelle notifiche usando la funzione seguente:

(void)keyboardWasShown:(NSNotification*)aNotification 
(void)keyboardWillBeHidden:(NSNotification*)aNotification 

1
Il collegamento è interrotto. Si prega di considerare di includere una soluzione indipendente in futuro!
miek

5

Controllalo. Nessun problema per te.

Questa soluzione è molto chiara. Tutto quello che devi fare è aggiungere i tuoi campi di testo in a UIScrollViewe cambiare la sua classe in TPKeyboardAvoidingScollView, se stai usando gli storyboard. La visualizzazione a scorrimento è estesa in modo tale da rilevare quando la tastiera è visibile e si sposterà sopra la tastiera a una distanza ragionevole. È una soluzione perfetta perché è indipendente dal tuo UIViewController. Ogni cosa necessaria viene eseguita all'interno della classe sopra menzionata. Grazie Michael Tyson e tutti.

TPKeyboardAvoiding


@NANNAV - Fornisci commenti quando offri suggerimenti per modificare una risposta.
Segugio della sicurezza

5

Di seguito è una versione rapida della risposta di Amagrammer. Inoltre, una variazione che utilizza l'evento UIKeyboardWillShowNotification poiché avevo bisogno di conoscere le dimensioni della tastiera prima di spostare la vista fuori mano.

var keyboardHeight:CGFloat = 0

override func viewDidLoad() {
    super.viewDidLoad()
    NSNotificationCenter.defaultCenter().addObserver(self, selector: "keyboardWillChange:", name: UIKeyboardWillShowNotification, object: nil)
}

func textFieldDidBeginEditing(textField: UITextField) {
    //keyboardWillChange (below) is used instead of textFieldDidBeginEditing because textFieldDidBeginEditing
    //is called before the UIKeyboardWillShowNotification necessary to determine the keyboard height.
}

func textFieldDidEndEditing(textField: UITextField) {
    animateTextField(false)
}

func animateTextField(textFieldUp:Bool) {
    let movementDistance:CGFloat = keyboardHeight
    let movementDuration = 0.3

    let movement:CGFloat = (textFieldUp ? -movementDistance : movementDistance)

    UIView.beginAnimations("anim", context: nil)
    UIView.setAnimationBeginsFromCurrentState(true)
    UIView.setAnimationDuration(movementDuration)
    self.view.frame = CGRectOffset(self.view.frame, 0, movement)
    UIView.commitAnimations()
}

func keyboardWillChange(notification:NSNotification) {
    let keyboardRect:CGRect = ((notification.userInfo![UIKeyboardFrameEndUserInfoKey])?.CGRectValue)!
    keyboardHeight = keyboardRect.height
    animateTextField(true)
}

4

C'è stata una grande procedura dettagliata per modificare i campi di testo senza oscurarli (link ora morto, ecco un link Wayback: https://web.archive.org/web/20091123074029/http://acts-as-geek.blogspot.com/2009/ 11 / editing-textfields-without-obscuring.html ). Mostra come spostare un esistente UIViewsu un fileUIScrollView , e come farlo scorrere automaticamente quando appare la tastiera.

L'ho aggiornato un po 'per calcolare l'altezza corretta per UIScrollViewquando ci sono controlli (come a UITabBar) sotto UIScrollBar. Vedi il post di aggiornamento uiview .


2

Ecco una soluzione utilizzando Xcode5, iOS7:

Usa i blocchi UITextfieldDelegate e animazione.

Questo è quasi tutto il codice per ViewController, ma volevo includere il codice delegato per coloro che ancora non hanno familiarità con il pattern delegato (come me). Ho anche incluso il codice per nascondere la tastiera quando tocchi fuori dalla visualizzazione di testo.

Puoi spostare le visualizzazioni (pulsanti, campi di testo, ecc.) Più in alto che desideri, ma assicurati di rimetterle a posto (+100 e poi -100).

@interface ViewController () <UITextFieldDelegate>
@property (strong, nonatomic) IBOutlet UITextField *MyTextField;

@implementation ViewController

- (void)viewDidLoad
{
    [super viewDidLoad];

    self.MyTextField.delegate = self;

}

- (void)textFieldDidBeginEditing:(UITextField *)textField
{
      NSLog(@"text began editing");

      CGPoint MyPoint = self.MyTextField.center;

      [UIView animateWithDuration:0.3
                    animations:^{

                    self.MyTextField.center = CGPointMake(MyPoint.x, MyPoint.y - 100);
                                }];
}

- (void)textFieldDidEndEditing:(UITextField *)textField
{
     NSLog(@"text ENDED editing");

     CGPoint MyPoint = self.MyTextField.center;

     [UIView animateWithDuration:0.3
                 animations:^{

     self.MyTextField.center = CGPointMake(MyPoint.x, MyPoint.y + 100);
                             }];
}

- (void)touchesBegan:(NSSet *)touches withEvent:(UIEvent *)event {
     [self.view endEditing:YES];
}

1

Immagino che un modo sarebbe spostare l'intera posizione delle visualizzazioni da (x, y) a (x, y-keybaardHeight) quando si fa clic sul campo di testo e rimetterlo a posto quando la tastiera viene chiusa, potrebbe sembrare un po 'strana come la vista viene fuori (forse non sarebbe male se lo animassi).

- (void)textFieldDidBeginEditing:(UITextField *)textField
{
    CGRect frame=self.view.frame;
    frame.origin=CGPointMake(x...//set point here
    self.view.frame=frame;
}

No non lo è. Se l'utente tocca il primo campo di testo, si troverà sopra l'area visibile.
lolol

0

Oltre alla soluzione di Amagrammer, se stai usando cocos2d in modalità verticale cambia questa riga:

self.view.frame = CGRectOffset(self.view.frame, 0, movement);

a questa:

[CCDirector sharedDirector].openGLView.frame = CGRectOffset([CCDirector sharedDirector].openGLView.frame, movement, 0);

Se stai usando cocos2d in modalità orizzontale, apporta la modifica sopra e cambia i upvalori in textFieldDidBeginEditing:etextFieldDidEndEditing:

- (void)textFieldDidBeginEditing:(UITextField *)textField {
    [self animateTextField:textField up:NO];
}

- (void)textFieldDidEndEditing:(UITextField *)textField {
    [self animateTextField:textField up:YES];
}

0

Ho avuto lo stesso problema e ho trovato GTKeyboardHelper una facile via d'uscita.

Dopo aver trascinato e rilasciato il framework nel progetto, includi il file di intestazione. Scarica e apri il progetto di esempio, quindi trascina l'oggetto "Keyboard Helper" dalla sezione degli oggetti in xib alla sezione degli oggetti nel generatore di interfacce del tuo progetto.

Trascina e rilascia tutte le tue visualizzazioni per essere figli di "Keyboard Helper".


0

Drag and drop framework che utilizzo nei miei progetti. Supporta l'eliminazione automatica quando tocchi fuori da un primo risponditore o quando scorri.

GTKeyboardHelper


0

Basta far scorrere la vista su e giù secondo necessità:

- (void)textFieldDidEndEditing:(UITextField *)textField {
    self.currentTextField = nil;
    [self animateTextField: textField up: NO];
}

- (BOOL)textFieldShouldReturn:(UITextField *)textField {
    [self.currentTextField resignFirstResponder];
    return YES;
}

- (void) animateTextField:(UITextField*) textField up:(BOOL)up {
    const int movementDistance = 80; // tweak as needed
    const float movementDuration = 0.3f; // tweak as needed

    int movement = (up ? -movementDistance : movementDistance);

    [UIView animateWithDuration:movementDuration animations:^{
        self.view.frame = CGRectOffset(self.view.frame, 0, movement);
    }];
}

Non dimenticare di impostare selfcome UITextFieldDelegatee come campo di testo effettivodelegate .

(Grazie ad Ammagrammer, questa è solo una risposta più breve usando i blocchi per le animazioni)


0

Ho qualcos'altro se vuoi. Il punto qui è che vuoi impostare il centro della tua UIView sul campo di testo che stai modificando.

Prima di ciò, devi salvare il tuo INITIAL_CENTER , come CGPoint , da self.view.center e il tuo INITIAL_VIEW come CGRect da self.view.frame in una proprietà const.

Puoi creare un metodo come questo:

- (void) centerOn: (CGRect) fieldFrame {

    // Set up the center by taking the original view center
    CGPoint center = CGPointMake(INITIAL_CENTER.x,
                             INITIAL_CENTER.y - ((fieldFrame.origin.y + fieldFrame.size.height/2) - INITIAL_CENTER.y));


    [UIView beginAnimations:@"centerViewOnField" context:nil];
    [UIView setAnimationDuration:0.50];

    if (CGRectEqualToRect(fieldFrame,INITIAL_VIEW)) {
        self.view.frame = INITIAL_VIEW;
        [self.view setCenter:INITIAL_CENTER];
    } else {
        [self.view setCenter:center];
    }


    [UIView commitAnimations];
}

Quindi, sul tuo UITextFieldDelegate , devi chiamare centerOn: (CGRect) nei seguenti metodi:

textFieldDidBeginEditing: (UITextField *) con, come parametro, la cornice del campo di testo su cui si desidera centrare.

E devi chiamarlo nel tuo gestore di eventi, dove chiudi la tastiera,

textFieldDidEndEditing: (UITextField *) può essere uno dei modi per farlo, mettendo INITIAL_VIEW come parametro di centerOn: (CGRect) .


0

Credo che nelle versioni più recenti di iOS (6.1+, forse anche precedenti), la vista sottostante, almeno per UITableView, si restringa automaticamente quando si apre la tastiera. Quindi devi solo rendere visibile il campo di testo in quella vista. In init:

[[NSNotificationCenter defaultCenter] addObserver:self
                                         selector:@selector(keyboardWasShown:)
                                             name:UIKeyboardDidShowNotification
                                           object:nil];

poi:

- (void)keyboardWasShown:(NSNotification*)notification
{
    // Scroll the text field into view so it's not under the keyboard.
    CGRect rect = [self.tableView convertRect:inputView.bounds fromView:inputView];
    [self.tableView scrollRectToVisible:rect animated:YES];
}

0

https://github.com/ZulwiyozaPutra/Shift-Keyboard-Example Spero che questa soluzione abbia aiutato. Sono tutti scritti in Swift 3.

//
//  ViewController.swift
//  Shift Keyboard Example
//
//  Created by Zulwiyoza Putra on 11/23/16.
//  Copyright © 2016 Zulwiyoza Putra. All rights reserved.
//

import UIKit

class ViewController: UIViewController, UITextFieldDelegate {
    
    
    //connecting textfield from storyboard
    @IBOutlet weak var textField: UITextField!
    
    override func viewWillAppear(_ animated: Bool) {
        super.viewWillAppear(animated)
        subscribeToKeyboardNotifications()
    }
    
    override func viewDidAppear(_ animated: Bool) {
        self.textField.delegate = self
    }
    
    override func viewWillDisappear(_ animated: Bool) {
        super.viewWillDisappear(animated)
        unsubscribeFromKeyboardNotifications()
    }
    
    //Hide keyboard after finished editing
    func textFieldShouldReturn(_ textField: UITextField) -> Bool {
        textField.resignFirstResponder()
        return true
    }
    
    //Setup view before keyboard appeared
    func keyboardWillAppear(_ notification:Notification) {
        view.frame.origin.y = 0 - getKeyboardHeight(notification)
    }
    
    //Setup view before keyboard disappeared
    func keyboardWillDisappear(_ notification: Notification) {
        view.frame.origin.y = 0
    }
    
    //Getting keyboard height
    func getKeyboardHeight(_ notification:Notification) -> CGFloat {
        let userInfo = notification.userInfo
        let keyboardSize = userInfo![UIKeyboardFrameEndUserInfoKey] as! NSValue // of CGRect
        return keyboardSize.cgRectValue.height
    }
    
    //Subscribing to notifications to execute functions
    func subscribeToKeyboardNotifications() {
        NotificationCenter.default.addObserver(self, selector: #selector(keyboardWillAppear(_:)), name: .UIKeyboardWillShow, object: nil)
        NotificationCenter.default.addObserver(self, selector: #selector(keyboardWillDisappear(_:)), name: .UIKeyboardWillHide, object: nil)
    }
    
    //Unsubscribing from notifications
    func unsubscribeFromKeyboardNotifications() {
        NotificationCenter.default.removeObserver(self, name: .UIKeyboardWillShow, object: nil)
        NotificationCenter.default.removeObserver(self, name: .UIKeyboardWillHide, object: nil)
    }
    
}

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.