Come fare in modo che il tasto di ritorno su iPhone faccia scomparire la tastiera?


108

Ne ho due UITextFields(es. Nome utente e password) ma non riesco a sbarazzarmi della tastiera premendo il tasto Invio sulla tastiera. Come posso fare questo?

Risposte:


242

Per prima cosa devi conformarti al UITextFieldDelegateprotocollo nel file di intestazione del tuo View / ViewController in questo modo:

@interface YourViewController : UIViewController <UITextFieldDelegate>

Quindi nel tuo file .m devi implementare il seguente UITextFieldDelegatemetodo di protocollo:

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

    return YES;
}

[textField resignFirstResponder]; si assicura che la tastiera venga chiusa.

Assicurati di impostare il tuo view / viewcontroller come delegato di UITextField dopo aver inizializzato il campo di testo in .m:

yourTextField = [[UITextField alloc] initWithFrame:yourFrame];
//....
//....
//Setting the textField's properties
//....    
//The next line is important!!
yourTextField.delegate = self; //self references the viewcontroller or view your textField is on

7
È inoltre possibile implementare il delegato nello storyboard facendo clic sul campo di testo, visualizzare il pannello Utilità, fare clic su Ispettore connessioni, trascinare l'uscita delegato sul controller della vista.
guptron

1
Dove è implementato il tuo metodo textFieldShouldReturn? È necessario impostare quella classe come delegato di UITextField. Il callback delegato verrà attivato solo dalla classe impostata per essere il delegato e se la classe lo ha implementato.
Sid

1
Hai impostato MyViewController in modo che sia conforme a UITextFieldDelegate nella sua intestazione?
Sid

1
Finché myTextField è stato allocato correttamente e non è nullo. Tecnicamente, va bene se è zero (nessun incidente) ma poi non farà nulla :)
Sid

1
E se posso aggiungere, non importa se stai usando solo una classe UITextField sovrascritta , come UIFloatLabelTextField, HAI ANCORA BISOGNO di yourTextField.delegate = self; !!!
Gellie Ann

19

Implementa il metodo UITextFieldDelegate in questo modo:

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


6

Il tuo UITextFields dovrebbe avere un oggetto delegato (UITextFieldDelegate). Usa il codice seguente nel tuo delegato per far scomparire la tastiera:

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

Dovrebbe funzionare finora ...


Ehi amico, ho fatto quello che hai detto sopra ma non riesco ancora a far sparire la tastiera. Hai qualche idea? Grazie.
K.Honda

Ehi Chris, ora è tutto a posto. Grazie.
K.Honda

6

Mi ci sono voluti un paio di prove, ho avuto lo stesso problema, questo ha funzionato per me:

Controlla l'ortografia su -

(BOOL)textFieldShouldReturn:(UITextField *)textField {
    [textField resignFirstResponder];

Ho corretto il mio al textFieldposto di textfield, maiuscola "F" ... e bingo !! ha funzionato..


4

Quando si preme il tasto Invio, chiamare:

[uitextfield resignFirstResponder];

Ehi Conor, come fa l'app a sapere quando viene premuto il tasto Invio? Grazie.
K.Honda

3

Dopo un po 'di tempo a caccia di qualcosa che abbia senso, questo è quello che ho messo insieme e ha funzionato a meraviglia.

.h

//
//  ViewController.h
//  demoKeyboardScrolling
//
//  Created by Chris Cantley on 11/14/13.
//  Copyright (c) 2013 Chris Cantley. All rights reserved.
//

#import <UIKit/UIKit.h>

@interface ViewController : UIViewController <UITextFieldDelegate>

// Connect your text field to this the below property.
@property (weak, nonatomic) IBOutlet UITextField *theTextField;

@end

.m

//
//  ViewController.m
//  demoKeyboardScrolling
//
//  Created by Chris Cantley on 11/14/13.
//  Copyright (c) 2013 Chris Cantley. All rights reserved.
//

#import "ViewController.h"

@interface ViewController ()

@end

@implementation ViewController



- (void)viewDidLoad
{
    [super viewDidLoad];
    // _theTextField is the name of the parameter designated in the .h file. 
    _theTextField.returnKeyType = UIReturnKeyDone;
    [_theTextField setDelegate:self];

}

// This part is more dynamic as it closes the keyboard regardless of what text field 
// is being used when pressing return.  
// You might want to control every single text field separately but that isn't 
// what this code do.
-(void)textFieldShouldReturn:(UITextField *)textField
{
    [textField resignFirstResponder];
}


@end

Spero che questo ti aiuti!


3

Imposta il delegato di UITextField sul tuo ViewController, aggiungi un punto di riferimento tra il proprietario del file e UITextField, quindi implementa questo metodo:

-(BOOL)textFieldShouldReturn:(UITextField *)textField 
{
   if (textField == yourTextField) 
   {
      [textField resignFirstResponder]; 
   }
   return NO;
}

3

Aggiungi questo al posto della classe predefinita

class ViewController: UIViewController, UITextFieldDelegate {

Per rimuovere la tastiera quando si fa clic all'esterno della tastiera

override func touchesBegan(touches: Set<UITouch>, withEvent event: UIEvent?) {
        self.view.endEditing(true)
    }

e per rimuovere la tastiera quando si preme invio

aggiungi questa riga in viewDidLoad ()

inputField è il nome del textField utilizzato.

self.inputField.delegate = self

e aggiungi questa funzione

func textFieldShouldReturn(textField: UITextField) -> Bool {        
        textField.resignFirstResponder()        
        return true        
    }

2

Swift 2:

questo è quello che si fa per fare ogni cosa!

chiudere la tastiera con il Donepulsante o Touch outSide,Next per passare all'input successivo.

Primo cambio TextFiled Return KeyPer Nextdi storyboard.

override func viewDidLoad() {
  txtBillIdentifier.delegate = self
  txtBillIdentifier.tag = 1
  txtPayIdentifier.delegate  = self
  txtPayIdentifier.tag  = 2

  let tap = UITapGestureRecognizer(target: self, action: "onTouchGesture")
  self.view.addGestureRecognizer(tap)

}

func textFieldShouldReturn(textField: UITextField) -> Bool {
   if(textField.returnKeyType == UIReturnKeyType.Default) {
       if let next = textField.superview?.viewWithTag(textField.tag+1) as? UITextField {
           next.becomeFirstResponder()
           return false
       }
   }
   textField.resignFirstResponder()
   return false
}

func onTouchGesture(){
    self.view.endEditing(true)
}

L'uso dei tag è esplicitamente sconsigliato da Apple. Potresti invece usare un IBOutletCollection
Antzi

2

in swift dovresti delegare UITextfieldDelegate , è importante non dimenticarlo, nel viewController, come:

class MyViewController: UITextfieldDelegate{

     mytextfield.delegate = self

     func textFieldShouldReturn(textField: UITextField) -> Bool {
          textField.resignFirstResponder()
     }
}

0

Puoi aggiungere un'IBAction a uiTextField (l'evento di rilascio è "Did End On Exit") e l'IBAction può essere chiamata hideKeyboard,

-(IBAction)hideKeyboard:(id)sender
{
    [uitextfield resignFirstResponder];
}

inoltre, puoi applicarlo ad altri campi o pulsanti di testo, ad esempio, puoi aggiungere un pulsante nascosto alla vista, quando fai clic su di esso per nascondere la tastiera.



0

Se si desidera che la tastiera scompaia quando si scrive sui campi di testo della casella di avviso

[[alertController.textFields objectAtIndex:1] 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.