UITextField - evento do botão de retorno de captura


101

Como posso detectar quando um usuário pressionou o botão "retornar" do teclado durante a edição de UITextField? Preciso fazer isso para dispensar o teclado quando o usuário pressionou o botão "Voltar".

Obrigado.

Respostas:


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

Não se esqueça de definir o delegado no storyboard ...

insira a descrição da imagem aqui


47
Certifique-se de que seu controlador de visualização esteja definido como delegado do campo de texto.
zekel de

1
Obrigado. Para mim, defino o delegado via self.yourTextField.delegate = self;. Mesmo vários campos de texto também funcionam.
haxpor

@Praxiteles Isso agora pode ser feito no storyboard sem exigir delegação, verifique a resposta abaixo.
Blake Lockley

51

A delegação não é necessária, aqui está uma linha:

- (void)viewDidLoad {
    [textField addTarget:textField
                  action:@selector(resignFirstResponder)
        forControlEvents:UIControlEventEditingDidEndOnExit];
}

Infelizmente, você não pode fazer isso diretamente em seu Storyboard (você não pode conectar ações ao controle que as emite no Storyboard), mas você pode fazer isso por meio de uma ação intermediária.


1
Eu só quero salientar que o UIControlEventEditingDidEndOnExitevento é enviado apenas se o textFieldShouldReturn:método delegate retornar YES (sem antes cancelar o campo de texto).
alex-i

Você não tem que implementar delegação. Mas talvez se você tiver que voltar YESpara este método.
mxcl

9

SWIFT 3.0

override open func viewDidLoad() {
    super.viewDidLoad()    
    textField.addTarget(self, action: #selector(enterPressed), for: .editingDidEndOnExit)
}

na função enterPressed () coloque todos os comportamentos que você procura

func enterPressed(){
    //do something with typed text if needed
    textField.resignFirstResponder()
}

8

Agora você pode fazer isso em um storyboard usando o evento enviado 'Did End On Exit'.

Em sua subclasse de controlador de visualização:

 @IBAction func textFieldDidEndOnExit(textField: UITextField) {
    textField.resignFirstResponder()
}

Em seu storyboard para o campo de texto desejado:

insira a descrição da imagem aqui


Esta é a resposta correta agora.
Psiloc

3

Versão Swift usando UITextFieldDelegate:

func textFieldShouldReturn(_ textField: UITextField) -> Bool {
    resignFirstResponder()
    return false
}

2

Swift 5

textField.addTarget(textField, action: #selector(resignFirstResponder), for: .editingDidEndOnExit)

-1
- (BOOL)textFieldShouldReturn:(UITextField *)txtField 
{
[txtField resignFirstResponder];
return NO;
}

Quando o botão Enter é clicado, este método delegado é chamado. Você pode capturar o botão de retorno deste método delegado.

Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.