Risposte:
Per prima cosa devi conformarti al UITextFieldDelegate
protocollo nel file di intestazione del tuo View / ViewController in questo modo:
@interface YourViewController : UIViewController <UITextFieldDelegate>
Quindi nel tuo file .m devi implementare il seguente UITextFieldDelegate
metodo 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
Implementa il metodo UITextFieldDelegate in questo modo:
- (BOOL)textFieldShouldReturn:(UITextField *)aTextField
{
[aTextField resignFirstResponder];
return YES;
}
Vedere Gestione della tastiera per una discussione completa su questo argomento.
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 ...
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 textField
posto di textfield
, maiuscola "F" ... e bingo !! ha funzionato..
Quando si preme il tasto Invio, chiamare:
[uitextfield resignFirstResponder];
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!
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;
}
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
}
Swift 2:
questo è quello che si fa per fare ogni cosa!
chiudere la tastiera con il Done
pulsante o Touch outSide
,Next
per passare all'input successivo.
Primo cambio TextFiled Return Key
Per Next
di 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)
}
in swift dovresti delegare UITextfieldDelegate , è importante non dimenticarlo, nel viewController, come:
class MyViewController: UITextfieldDelegate{
mytextfield.delegate = self
func textFieldShouldReturn(textField: UITextField) -> Bool {
textField.resignFirstResponder()
}
}
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.
Puoi provare questa sottoclasse UITextfield che puoi impostare una condizione per il testo per modificare dinamicamente UIReturnKey:
https://github.com/codeinteractiveapps/OBReturnKeyTextField