Modo semplice per chiudere la tastiera?


377

Ho parecchi controlli sparsi in molte celle della tabella nella mia tabella, e mi chiedevo se c'è un modo più semplice per chiudere la tastiera senza dover passare in rassegna tutti i miei controlli e dimettendoli tutti come primo risponditore. Immagino che la domanda sia ... Come posso ottenere l'attuale primo risponditore sulla tastiera?


buon complemento a questa domanda: stackoverflow.com/questions/1490573/...
ericsoco

Un avvertimento per tutte le risposte di seguito. Se esegui un seguito subito dopo le dimissioni del KB, il KB viene reso orfano e non può essere ignorato. È necessario chiudere la KB nel metodo textFieldShouldReturn.
gjpc,

26
licenziamento globale della tastiera nel modo giusto:[[[UIApplication sharedApplication] keyWindow] endEditing:YES];
Yerk,

Ho trovato utile questo video pinkstone.co.uk/… . Forse può aiutare gli altri.
enthusiasticgeek,

Risposte:


797

Provare:

[self.view endEditing:YES];

1
Questo sembra funzionare (testato su iOS4.1). Sebbene sia disponibile solo su iOS 3.2 e versioni successive. Non sono sicuro se questo è effettivamente garantito per funzionare, o è solo un effetto collaterale non garantito dal chiamare un'API in un modo che non è documentato per funzionare.
JosephH,

3
Questo ha funzionato perfettamente per me ed è sicuramente preferibile ad alcune delle altre risposte a questa domanda. I documenti dicono che è disponibile in iOS 2.0 e versioni successive.
Antsyawn,

8
Come dice la documentazione: "Questo metodo esamina la vista corrente e la sua gerarchia di sottoview per il campo di testo che è attualmente il primo risponditore. Se ne trova uno, chiede a quel campo di testo di dimettersi come primo risponditore. Se il parametro force è impostato a SÌ, il campo di testo non viene mai nemmeno richiesto; è costretto a dimettersi. " - quindi questa è l'IMO la risposta corretta alla domanda originale (caso d'uso: ho un modulo con milioni di campi, beh - dieci ... o giù di lì, e devo chiudere la tastiera).
joshis,

14
La risposta non è sbagliata ma un po 'errata, in realtà dovrebbe essere: [self.view endEditing:YES];poiché i valori BOOL sono SÌ / NO in Obiettivo-C.
chrisben,

24
chrisben: è possibile utilizzare SÌ / NO, VERO / FALSO, 0/1.
Michael Superczynski,

126

Puoi forzare la vista in corso di modifica a rassegnare le dimissioni con il suo primo stato di risposta [view endEditing:YES]. Questo nasconde la tastiera.

Diversamente -[UIResponder resignFirstResponder], -[UIView endEditing:]cercherà tra le sottoview per trovare l'attuale primo risponditore. Quindi puoi inviarlo alla tua vista di livello superiore (ad es. self.viewIn a UIViewController) e farà la cosa giusta.

(Questa risposta precedentemente includeva un paio di altre soluzioni, che funzionavano anche ma erano più complicate del necessario. Le ho rimosse per evitare confusione.)


Ma questo impedirà al componente di diventare firstResponder, non rimuoverà lo stato firstResponder corrente da un elemento.
Kendall Helmstetter Gelner,

Ciò che intendevo per ignorare diventareFirstResponder per memorizzare il primo risponditore da qualche parte, in modo che sia possibile accedervi (in questo caso, rassegnare le dimissioni) in un secondo momento. Il problema di base è che Cocoa Touch non fornisce un modo per chiedere a una finestra o visualizzare qual è il suo primo risponditore.
Nicholas Riley,

+1 Aggiunta di diventare primi problemi risolti con i tocchi su altri UITextFields.
Jason George,

3
Questo è obsoleto La [self.view endEditing:YES];risposta è migliore
ftvs

1
Questo non è obsoleto, questa risposta spiega esattamente come [UIView endediting:]funziona. In una delle app che ho sviluppato, è stata aggiunta una casella di ricerca in UINavigationViewController, se hai appena chiamato [self.view endEditing:YES], come selfcontroller di visualizzazione, questo non funzionerà, invece ho chiamato questo metodo direttamente nell'ambito della vista in cui è stata aggiunta la casella di ricerca, ad esempio: [self.mySearchBoxView endEditing:YES].
Jan Cássio,

92

Puoi inviare un'azione mirata nulla all'applicazione, che si dimetterà dal primo risponditore in qualsiasi momento senza doversi preoccupare di quale vista abbia attualmente lo stato di primo risponditore.

Objective-C:

[[UIApplication sharedApplication] sendAction:@selector(resignFirstResponder) to:nil from:nil forEvent:nil];

Swift 3.0:

UIApplication.shared.sendAction(#selector(resignFirstResponder), to: nil, from: nil, for: nil)

Le azioni mirate zero sono comuni su Mac OS X per i comandi di menu, ed ecco un uso per loro su iOS.


14
La migliore soluzione di tutta la pagina.
Leo Natan,

Assolutamente il modo migliore per sbarazzarsi della tastiera da qualsiasi parte dell'app iOS.
Ben Sinclair,

Funziona ancora per me in iOS8. Nella mia applicazione, ho un menu della barra laterale e ci sono volte in cui il controller della vista "centrale" mostra la tastiera. E voglio chiudere la tastiera se verrà visualizzato il menu della barra laterale. Quindi ho aggiunto questo codice nel mio menu della barra laterale Metodo classe viewWillAppear.
Jenn Eve,

1
Funziona ancora su iOS 9. Ottimo modo per rassegnare le dimissioni a livello globale di un campo di testo e chiudere la tastiera.
bmjohns,

E per continuare questa particolare serie di commenti .... Funziona ancora su iOS 10. :-)
Traveling Man

56

Ad essere sincero, non vado matto per nessuna delle soluzioni proposte qui. Ho trovato un modo carino per usare un TapGestureRecognizer che penso possa essere al centro del tuo problema: quando fai clic su qualcosa oltre alla tastiera, chiudi la tastiera.

  1. In viewDidLoad, registrati per ricevere le notifiche da tastiera e creare un UITapGestureRecognizer:

    NSNotificationCenter *nc = [NSNotificationCenter defaultCenter];
    
    [nc addObserver:self selector:@selector(keyboardWillShow:) name:
    UIKeyboardWillShowNotification object:nil];
    
    [nc addObserver:self selector:@selector(keyboardWillHide:) name:
    UIKeyboardWillHideNotification object:nil];
    
    tapRecognizer = [[UITapGestureRecognizer alloc] initWithTarget:self
    action:@selector(didTapAnywhere:)];
  2. Aggiungi la tastiera mostra / nascondi risponditori. Lì aggiungi e rimuovi TapGestureRecognizer in UIView che dovrebbe chiudere la tastiera quando viene toccato. Nota: non è necessario aggiungerlo a tutte le viste secondarie o ai controlli.

    -(void) keyboardWillShow:(NSNotification *) note {
        [self.view addGestureRecognizer:tapRecognizer];
    }
    
    -(void) keyboardWillHide:(NSNotification *) note
    {
        [self.view removeGestureRecognizer:tapRecognizer];
    }
  3. TapGestureRecognizer chiamerà la tua funzione quando riceve un tocco e puoi chiudere la tastiera in questo modo:

    -(void)didTapAnywhere: (UITapGestureRecognizer*) recognizer {    
        [textField resignFirstResponder];
    }

La cosa bella di questa soluzione è che filtra solo i rubinetti, non i colpi. Pertanto, se si dispone di contenuto scorrevole sopra la tastiera, i passaggi continueranno a scorrere e lasceranno visualizzata la tastiera. Rimuovendo il riconoscimento dei gesti dopo che la tastiera è scomparsa, i tocchi futuri sulla vista vengono gestiti normalmente.


Alla mia @implementazione ho aggiunto @property (assegnare) UITapGestureRecognizer * tapRecognizer; e modificato self.tapRecognizer = [[[UITapGestureRecognizer alloc] initWithTarget: auto-azione: @selector (didTapAnywhere :)];
Professor Todd,

Sto cercando di fare una cosa simile e non riesco a richiamare il tocco. Curioso: perché la tua proprietà è "assegnata"?
TahoeWolverine,

Più uno, e inoltre questo dovrebbe essere il comportamento predefinito di iOS. O almeno aggiungi un modo semplice per attivare / disattivare un pulsante di eliminazione.
Shaunti Fondrisi,

24

Questa è una soluzione per far sparire la tastiera quando viene premuto returnin qualsiasi campo di testo, aggiungendo codice in un punto (quindi non è necessario aggiungere un gestore per ogni campo di testo):


considerare questo scenario:

ho un viewcontrollercon due campi di testo (nome utente e password). e viewcontrollerimplementa il UITextFieldDelegateprotocollo

lo faccio in viewDidLoad

- (void)viewDidLoad 
{
    [super viewDidLoad];

    username.delegate = self;
    password.delegate = self;
}

e il viewcontroller implementa il metodo opzionale come

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

e indipendentemente dal campo di testo in cui ti trovi, non appena premo returnsulla tastiera, viene eliminato!

Nel tuo caso, lo stesso funzionerebbe fintanto che imposti il ​​delegato del campo di testo su se stesso e implementalo textFieldShouldReturn


Bene, ho già risolto il problema, ma nel mio caso volevo chiudere la tastiera da solo (nel codice) e non sapevo quale textField avesse lo stato di primo risponditore.
Settanta,

1
Ci sono casi in cui potresti voler chiudere la tastiera senza premere "Invio", ad esempio quando un menu della barra laterale sta per essere visualizzato
Peter Johnson,

Modificato per chiarire che questa risposta è rilevante solo in situazioni in cui colpire il "ritorno" è una soluzione accettabile. [Nel mio caso, volevo anche chiudere la tastiera quando l'utente toccava al di fuori del campo in fase di modifica; questa risposta non aiuta a questo.]
ToolmakerSteve

14

Un approccio migliore è avere qualcosa che "ruba" lo status di primo soccorritore.

Poiché UIApplication è una sottoclasse di UIResponder, puoi provare:

[[UIApplication sharedApplication] becomeFirstResponder]
[[UIApplication sharedApplication] resignFirstResponder]

In caso contrario, crea un nuovo UITextField con un frame di dimensioni zero, aggiungilo a una vista da qualche parte e fai qualcosa di simile (segui le dimissioni).


1
Il trucco di UIApplication non funziona (si arresta in modo anomalo, almeno sul simulatore) ma non è necessario un UITextField di dimensioni zero: basta selezionare qualsiasi campo casuale e farlo con esso. È diventato un metodo di sola notifica per NSResponder.
Nicholas Riley,

1
Ah grazie! Si blocca chiamandolo su UIApplication ma UITextField di dimensione zero funziona alla grande e non devo recuperare nessuno dei miei campi precedenti.
Seventoes,

Perché qualcuno dovrebbe farlo se esiste un metodo ufficiale, perfettamente valido e documentato per questo?
Maciej Swic,

2
Non vedrebbero la risposta più votata per la soluzione migliore. All'epoca non era ben noto (la mia risposta era del 2009, l'altra risposta è arrivata più di un anno dopo nel 2010). ma lo lascio per i posteri.
Kendall Helmstetter Gelner,

8

Riponilo in qualche classe di utilità.

+ (void)dismissKeyboard {
    [self globalResignFirstResponder];
}

+ (void) globalResignFirstResponder {
    UIWindow * window = [[UIApplication sharedApplication] keyWindow];
    for (UIView * view in [window subviews]){
        [self globalResignFirstResponderRec:view];
    }
}

+ (void) globalResignFirstResponderRec:(UIView*) view {
    if ([view respondsToSelector:@selector(resignFirstResponder)]){
        [view resignFirstResponder];
    }
    for (UIView * subview in [view subviews]){
        [self globalResignFirstResponderRec:subview];
    }
}

1
questo è quello che stavo cercando!
aslisabanci,

Perfetto, tranne per il fatto che non è necessario il metodo globalResignFirstResponderRec, basta chiamare invece [view endEditing: YES]. Fa la stessa cosa.
n13,

Si! L'ultima soluzione! Ho provato molti modi, solo questo funziona per me! Grazie mille!
Douyw,

6

@Nicholas Riley & @Kendall Helmstetter Geln & @cannyboy:

Assolutamente brillante!

Grazie.

Considerando il tuo consiglio e quello degli altri in questo thread, questo è quello che ho fatto:

Come appare quando usato:

[[self appDelegate] dismissKeyboard]; (nota: ho aggiunto appDelegate come aggiunta a NSObject in modo da poterlo utilizzare ovunque su qualsiasi cosa)

Come appare sotto il cofano:

- (void)dismissKeyboard 
{
    UITextField *tempTextField = [[[UITextField alloc] initWithFrame:CGRectZero] autorelease];
    tempTextField.enabled = NO;
    [myRootViewController.view addSubview:tempTextField];
    [tempTextField becomeFirstResponder];
    [tempTextField resignFirstResponder];
    [tempTextField removeFromSuperview];
}

MODIFICARE

Modifica alla mia risposta inclusa tempTextField.enabled = NO;. La disabilitazione del campo di testo impedirà UIKeyboardWillShowNotificatione verranno UIKeyboardWillHideNotificationinviate le notifiche da tastiera se si fa affidamento su tali notifiche in tutta l'app.


non so se funziona, ma sembra un modo semplice e intelligente.
demone

5

Suggerimento rapido su come chiudere la tastiera in iOS quando un utente tocca un punto qualsiasi dello schermo al di fuori di UITextField o tastiera. Considerando la quantità di proprietà immobiliare che la tastiera iOS può occupare, ha senso avere un modo semplice e intuitivo per gli utenti di chiudere la tastiera.

Ecco un link


Grande! l'aggiunta ad AppDelegate lo fa funzionare per TUTTE le viste correlate.
Jiulong Zhao,

5

Molte risposte eccessivamente complicate qui, forse perché questo non è facile da trovare nella documentazione di iOS. JosephH lo aveva proprio sopra:

[[view window] endEditing:YES];

4

Ancora più semplice della risposta di Meagar

sovrascrittura touchesBegan:withEvent:

- (void)touchesBegan:(NSSet *)touches withEvent:(UIEvent *)event
{
    [textField resignFirstResponder];`
}

Questo avverrà dismiss the keyboardquando tocchi un punto qualsiasi del background.


3

Ecco cosa uso nel mio codice. Esso funziona magicamente!

In yourviewcontroller.h aggiungi:

@property (nonatomic) UITapGestureRecognizer *tapRecognizer;

Ora nel file .m, aggiungi questo alla tua funzione ViewDidLoad:

- (void)viewDidLoad {
    //Keyboard stuff
    tapRecognizer = [[UITapGestureRecognizer alloc] initWithTarget:self action:@selector(didTapAnywhere:)];
    tapRecognizer.cancelsTouchesInView = NO;
    [self.view addGestureRecognizer:tapRecognizer];
}

Inoltre, aggiungi questa funzione nel file .m:

- (void)handleSingleTap:(UITapGestureRecognizer *) sender
{
    [self.view endEditing:YES];
}

Grazie! Ma dovresti rinominare la funzione in 'didTapAnywhere' o il riconoscimento dei gesti in 'handleSingleTap' ;-)
Matthijs

2

Nella visualizzazione del file di intestazione del controller aggiungere <UITextFieldDelegate>alla definizione dell'interfaccia del controller in modo che sia conforme al protocollo delegato UITextField ...

@interface someViewController : UIViewController <UITextFieldDelegate>

... Nel file di implementazione del controller (.m) aggiungi il seguente metodo o il codice al suo interno se hai già un metodo viewDidLoad ...

- (void)viewDidLoad
{
    // Do any additional setup after loading the view, typically from a nib.
    self.yourTextBox.delegate = self;
}

... Quindi collega la tua casella di testo al campo di testo effettivo

- (BOOL)textFieldShouldReturn:(UITextField *)theTextField 
{
    if (theTextField == yourTextBox) {
        [theTextField resignFirstResponder];
    }
    return YES;
}

2

È necessario inviare endEditing:alla finestra di lavoro la sottoclasse diUIView

[[UIApplication sharedApplication].windows.firstObject endEditing:NO];

Scommetto che invece intendevi SÌ)
Matrosov Alexander

2

Il modo migliore per chiudere la tastiera da UITableView e UIScrollView sono:

tableView.keyboardDismissMode = UIScrollViewKeyboardDismissModeOnDrag

2

In swift 3 puoi fare quanto segue

UIApplication.shared.sendAction(#selector(UIResponder.resignFirstResponder), to: nil, from: nil, for: nil)

1

La risposta di Jeremy non funzionava abbastanza per me, penso perché avevo una pila di navigazione in una vista a schede con una finestra di dialogo modale sopra di essa. Sto usando quanto segue in questo momento e funziona per me, ma il tuo chilometraggio può variare.

 // dismiss keyboard (mostly macro)
[[UIApplication sharedApplication].delegate dismissKeyboard]; // call this in your to app dismiss the keybaord

// --- dismiss keyboard (in indexAppDelegate.h) (mostly macro)
- (void)dismissKeyboard;

// --- dismiss keyboard (in indexAppDelegate.m) (mostly macro)
// do this from anywhere to dismiss the keybard
- (void)dismissKeyboard {    // from: http://stackoverflow.com/questions/741185/easy-way-to-dismiss-keyboard

    UITextField *tempTextField = [[UITextField alloc] initWithFrame:CGRectZero];

    UIViewController *myRootViewController = <#viewController#>; // for simple apps (INPUT: viewController is whatever your root controller is called.  Probably is a way to determine this progragrammatically)
    UIViewController *uivc;
    if (myRootViewController.navigationController != nil) { // for when there is a nav stack
        uivc = myRootViewController.navigationController;
    } else {
        uivc = myRootViewController;
    }

    if (uivc.modalViewController != nil) { // for when there is something modal
        uivc = uivc.modalViewController;
    } 

    [uivc.view  addSubview:tempTextField];

    [tempTextField becomeFirstResponder];
    [tempTextField resignFirstResponder];
    [tempTextField removeFromSuperview];
    [tempTextField release];

}

Hmm - perché il voto negativo? Ho affrontato specifiche carenze del mondo reale in un'altra risposta con codice testato. Riesco a capire la mancanza di voti positivi, ma votarmi in territorio negativo è un vero scoraggiamento. Spero ancora che la risposta di cui sopra aiuti qualcun altro.
JJ Rohrer,

1

Potrebbe anche essere necessario sovrascrivere UIViewController disabilitaAutomaticKeyboardDismissal per farlo funzionare in alcuni casi. Potrebbe essere necessario farlo su UINavigationController se ne hai uno.


1

Sottoclasse i tuoi campi di testo ... e anche le visualizzazioni di testo

Nella sottoclasse inserisci questo codice ..

-(void)conformsToKeyboardDismissNotification{

    [[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(dismissKeyBoard) name:KEYBOARD_DISMISS object:nil];
}

-(void)deConformsToKeyboardDismissNotification{

    [[NSNotificationCenter defaultCenter] removeObserver:self name:KEYBOARD_DISMISS object:nil];
}

- (void)dealloc{
    [[NSNotificationCenter defaultCenter] removeObserver:self];
    [self resignFirstResponder];
}

Nei delegati del campo di testo (analogamente per i delegati della visualizzazione di testo)

-(void)textFieldDidBeginEditing:(JCPTextField *)textField{
     [textField conformsToKeyboardDismissNotification];
}


- (void)textFieldDidEndEditing:(JCPTextField *)textField{
    [textField deConformsToKeyboardDismissNotification];
}

Tutto pronto .. Ora basta pubblicare la notifica da qualsiasi parte del codice. Si dimetterà da qualsiasi tastiera.


1

E in fretta possiamo fare

UIApplication.sharedApplication().sendAction("resignFirstResponder", to: nil, from: nil, forEvent: nil)

Non capisco come funziona il primo soccorritore .. dove lo metto? a mio avviso controller o delegato?
Shayan C

Non importa Puoi metterlo dove vuoi. cioè azione pulsante
Eike

1

Per chiudere una tastiera dopo che la tastiera è spuntata, ci sono 2 casi ,

  1. quando UITextField si trova all'interno di UIScrollView

  2. quando UITextField è all'esterno di UIScrollView

2.quando UITextField è esterno a UIScrollView, il metodo viene ignorato dalla sottoclasse UIViewController

è inoltre necessario aggiungere delegato per tutto UITextView

- (void)touchesBegan:(NSSet *)touches withEvent:(UIEvent *)event {
    [self.view endEditing:YES];
}
  1. In una vista di scorrimento, toccando all'esterno non si genererà alcun evento , quindi in tal caso utilizzare un Riconoscimento gesti tocco , trascinare e rilasciare un UITapGesture per la vista di scorrimento e creare un IBAction per esso .

per creare un IBAction, premere ctrl + clic su UITapGesture e trascinarlo nel file .h di viewcontroller.

Qui ho chiamato tappedEvent come nome della mia azione

- (IBAction)tappedEvent:(id)sender {
      [self.view endEditing:YES];  }

le informazioni fornite sono state ricavate dal seguente link, si prega di fare riferimento per ulteriori informazioni o contattarmi se non si capisce i dati abouve.

http://samwize.com/2014/03/27/dismiss-keyboard-when-tap-outside-a-uitextfield-slash-uitextview/


0

Odio che non esiste un modo "globale" per chiudere a livello di codice la tastiera senza utilizzare le chiamate API private. Spesso ho la necessità di chiudere la tastiera a livello di codice senza sapere quale oggetto è il primo risponditore. Ho fatto ricorso all'ispezione selfdell'API di runtime Objective-C, elencando tutte le sue proprietà, estraendo quelle di tipo UITextFielde inviando loro il resignFirstRespondermessaggio.

Non dovrebbe essere così difficile farlo ...


0

Non è carino, ma il modo in cui mi dimetto dal primo risponditore quando non so cosa sia il risponditore:

Crea un UITextField, in IB o programmaticamente. Rendilo nascosto. Collegalo al tuo codice se lo hai creato in IB. Quindi, quando si desidera chiudere la tastiera, si passa al risponditore nel campo di testo invisibile e si dimette immediatamente:

  [self.invisibleField becomeFirstResponder];
  [self.invisibleField resignFirstResponder];

0

È possibile scorrere in modo ricorsivo le visualizzazioni secondarie, archiviare un array di tutti gli UITextField, quindi eseguirne il ciclo e dimettersi tutti.

Non è davvero un'ottima soluzione, soprattutto se hai molte visualizzazioni secondarie, ma per le app semplici dovrebbe fare il trucco.

L'ho risolto in un modo molto più complicato, ma molto più performante, ma usando un singleton / manager per il motore di animazione della mia app, e ogni volta che un campo di testo diventava il risponditore, lo assegnavo assegnandolo a uno statico che avrebbe ottenuto spazzato via (rassegnato) sulla base di alcuni altri eventi ... è quasi impossibile per me spiegare in un paragrafo.

Sii creativo, mi ci sono voluti solo 10 minuti per riflettere su questo per la mia app dopo aver trovato questa domanda.


Risolto mesi fa;) Ho finito per salvare il campo attivo e utilizzarlo.
Settanta,

0

Un metodo leggermente più robusto che dovevo usare di recente:

- (void) dismissKeyboard {
    NSArray *windows = [UIApplication sharedApplication].windows;

    for(UIWindow *window in windows) [window endEditing:true];

    //  Or if you're only working with one UIWindow:

    [[UIApplication sharedApplication].keyWindow endEditing:true];
}

Ho scoperto che alcuni degli altri metodi "globali" non funzionavano (ad esempio, UIWebViewe mi sono WKWebViewrifiutato di dimettermi).


0

Aggiungi un riconoscimento gesti tocco alla tua vista e definiscilo

il tuo file .m sarà simile

    - (IBAction)hideKeyboardGesture:(id)sender {
    NSArray *windows = [UIApplication sharedApplication].windows;
    for(UIWindow *window in windows) [window endEditing:true];
    [[UIApplication sharedApplication].keyWindow endEditing:true];
}

Ha funzionato per me


0

Sì, endEditing è l'opzione migliore. E da iOW 7.0, UIScrollViewha una funzione interessante per chiudere la tastiera quando interagisce con la vista di scorrimento. Per raggiungere questo obiettivo, è possibile impostare la keyboardDismissModeproprietà di UIScrollView.

Imposta la modalità di eliminazione della tastiera come:

tableView.keyboardDismissMode = UIScrollViewKeyboardDismissModeOnDrag

Ha pochi altri tipi. Dai un'occhiata a questo documento Apple .



0

il modo più semplice è chiamare il metodo

- (void)touchesBegan:(NSSet *)touches withEvent:(UIEvent *)event 
{
    if(![txtfld resignFirstResponder])
    {
        [txtfld resignFirstResponder];
    }
    else
    {

    }
    [super touchesBegan:touches withEvent:event];
}

Non è necessario il 'se' lì, resignFirstResponder farà comunque la sua cosa. Forse intendevi - (BOOL) canResignFirstResponder?
Seventoes,

0

Devi usare uno di questi metodi,

[self.view endEditing:YES];

o

[self.textField resignFirstResponder];
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.