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.

Ilya Suzdalnitski
fonte

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

Ilya Suzdalnitski
fonte
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.

mxcl
fonte
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()
}
Drpawelo
fonte
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

Blake Lockley
fonte
Esta é a resposta correta agora.
Psiloc
3

Versão Swift usando UITextFieldDelegate:

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

Swift 5

textField.addTarget(textField, action: #selector(resignFirstResponder), for: .editingDidEndOnExit)
Ted
fonte
-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.

Mahendra Vishwakarma
fonte