Fare clic in un campo di testo per far apparire la tastiera. Come lo nascondo quando l'utente preme il tasto Invio?
Fare clic in un campo di testo per far apparire la tastiera. Come lo nascondo quando l'utente preme il tasto Invio?
Risposte:
Innanzitutto, delegare il file per UITextField
@interface MYLoginViewController () <UITextFieldDelegate>
@end
Quindi aggiungi questo metodo al tuo codice.
- (BOOL)textFieldShouldReturn:(UITextField *)textField {
[textField resignFirstResponder];
return YES;
}
Aggiungi anche self.textField.delegate = self;
Nel viewDidLoad
dichiarare:
[yourTextField setDelegate:self];
Quindi, includere la sostituzione del metodo delegato:
-(BOOL)textFieldShouldReturn:(UITextField *)textField
{
[textField resignFirstResponder];
return YES;
}
setDelegate:
promemoria. Sicuramente avevo dimenticato e il codice non funzionava in precedenza.
Prova questo in Swift ,
Passaggio 1: impostare delegato come sé sul propriotextField
textField.delegate = self
Passaggio 2: aggiungi questo UITextFieldDelegate sotto la tua dichiarazione di classe,
extension YourClassName: UITextFieldDelegate {
func textFieldShouldReturn(textField: UITextField) -> Bool {
textField.resignFirstResponder()
return true
}
}
In fretta fai così:
prima di tutto, ViewController
implementa questo UITextFieldDelegate
Per es.
class MyViewController: UIViewController, UITextFieldDelegate {
....
}
Ora aggiungi un delegato a un TextField
in cui vuoi chiudere la tastiera quando viewDidLoad
si tocca return in un metodo come sotto o dove lo stai inizializzando. Per es.
override func viewDidLoad() {
super.viewDidLoad()
myTextField.delegate = self
}
Ora aggiungi questo metodo.
func textFieldShouldReturn(textField: UITextField) -> Bool {
textField.resignFirstResponder()
return true
}
Prova questo,
[textField setDelegate: self];
Quindi, nel metodo delegato textField
- (BOOL)textFieldShouldReturn:(UITextField *)textField {
[textField resignFirstResponder];
return YES;
}
impostare il metodo delegate UITextField
e over ride textFieldShouldReturn
, in quel metodo, basta scrivere due righe seguenti:
[textField resignFirstResponder];
return YES;
questo è tutto. Prima di scrivere un codice non dimenticare di impostare il delegato di a UITextField
e impostare il tipo di chiave Return su "Fatto" dalla finestra delle proprietà (comando + maiusc + I).
È possibile connettere "Azione primaria innescata" (fare clic con il tasto destro su UITextField) con un IBAction ed è possibile dimettersi dal primo risponditore (senza delega). Esempio (Swift 4):
@IBAction func textFieldPrimaryAction(_ sender: UITextField) {
sender.resignFirstResponder()
...
}
Set delegato UITextField
nel controller della vista, field.delegate = self
e quindi:
extension ViewController: UITextFieldDelegate {
func textFieldShouldReturn(_ textField: UITextField) -> Bool {
// don't force `endEditing` if you want to be asked for resigning
// also return real flow value, not strict, like: true / false
return textField.endEditing(false)
}
}
Se si desidera nascondere la tastiera per un uso particolare della tastiera
[self.view resignFirstResponder];
Se si desidera nascondere qualsiasi tastiera dalla visualizzazione, utilizzare[self.view endEditing:true];
Ok, penso che per un principiante le cose possano essere un po 'confuse. Penso che la risposta corretta sia un mix di tutto quanto sopra, almeno in Swift4.
Crea un'estensione o usa ViewController in cui desideri utilizzarlo, ma assicurati di implementare UITextFieldDelegate. Per motivi di riusabilità ho trovato più facile usare un'estensione:
extension UIViewController : UITextFieldDelegate {
...
}
ma l'alternativa funziona anche:
class MyViewController: UIViewController {
...
}
Aggiungi il metodo textFieldShouldReturn (a seconda dell'opzione precedente, nell'estensione o nel ViewController)
func textFieldShouldReturn(_ textField: UITextField) -> Bool {
return textField.endEditing(false)
}
Nel tuo metodo viewDidLoad, imposta il delegato del campo di testo su sé stesso
@IBOutlet weak var myTextField: UITextField!
...
override func viewDidLoad() {
..
myTextField.delegte = self;
..
}
Questo dovrebbe essere tutto. Ora, quando si preme return
il textFieldShouldReturn
dovrebbero essere chiamati.
Definire questa classe e quindi impostare il campo di testo per utilizzare la classe e questo automatizza l'intera tastiera nascosta quando si preme return automaticamente.
class TextFieldWithReturn: UITextField, UITextFieldDelegate
{
required init?(coder aDecoder: NSCoder)
{
super.init(coder: aDecoder)
self.delegate = self
}
func textFieldShouldReturn(_ textField: UITextField) -> Bool
{
textField.resignFirstResponder()
return true
}
}
Quindi tutto ciò che devi fare nello storyboard è impostare i campi per usare la classe: