Sei que preciso solicitar ao meu UITextField que renuncie ao primeiro atendedor quando quiser desligar o teclado, mas não sei como saber quando o usuário pressionou a tecla "Concluído" no teclado. Existe uma notificação que eu possa assistir?
181
Respostas:
Eu coloquei o delegado da na
UITextField
minhaViewController
classe.Nessa classe, implementei esse método da seguinte maneira:
fonte
NO
vez deYES
?NO
você evita adicionar um retorno de linha ao texto.Se você conectar o evento DidEndOnExit do campo de texto a uma ação (IBAction) no InterfaceBuilder, ele receberá uma mensagem quando o usuário dispensar o teclado (com a tecla Enter) e o remetente será uma referência ao UITextField que acionou o evento.
Por exemplo:
Em seguida, no InterfaceBuilder, vincule o evento DidEndOnExit do campo de texto a esta ação no seu controlador (ou o que você estiver usando para vincular eventos da interface do usuário). Sempre que o usuário digitar texto e dispensar o campo de texto, o controlador receberá esta mensagem.
fonte
Você também pode criar um método no seu controlador
e, em seguida, no Connection Inspector no IB, conecte o evento "Terminou na saída" a ele.
fonte
DidEndOnExit
evento, você não precisa ligarresignFirstResponder
. Você pode testar isso colocando um ponto de interrupção simbólico[UIResponder resignFirstResponder]
. Observe que, mesmo se você não chamar resignFirstResponder, ele ainda será chamado pelo sistema. Isso é explicado pelos excelentes livros de Matt Neuburg: apeth.com/iOSBook/…kubi, obrigado. Seu código funcionou. Só para ser explícito (para iniciantes gosta) como você diz que você tem que definir o
UITextField
'sdelegate
para ser igual ao ViewController em que reside o campo de texto. Você pode fazer isso onde quiser. Eu escolhi oviewDidLoad
métodofonte
delegate
. Você não precisa fazer isso programaticamente, conforme demonstrado acima. Qualquer abordagem funciona bem.Aqui está um truque para obter o comportamento automático de dispensa de teclado sem nenhum código. Na ponta, edite o objeto proxy do Primeiro Respondente no Inspetor de Identidade, adicionando uma nova ação do Primeiro Respondente; vamos chamá-lo
dummy:
. Agora conecte o evento Terminou na saída do campo de texto àdummy:
ação do objeto proxy do Primeiro Respondente. É isso aí! Como o evento Terminou na saída do campo de texto agora tem um par de ação-destino, o campo de texto automaticamente dispensa o teclado quando o usuário toca em Retornar; e como não há penalidade por não encontrar um manipulador para uma mensagem enviada na cadeia de respostas, o aplicativo não falha, mesmo que não haja implementação emdummy:
nenhum lugar.fonte
Basta adicionar
onde você deseja desativar o teclado e exibir a exibição do seletor.
fonte
No Swift, você pode escrever uma IBAction no Controller e definir o evento Did End On Exit do campo de texto para essa ação
fonte
Swift 4.2
e funcionará 100%fonte
Você também pode usar
Melhor se você tiver muitos Uitextfields:
fonte
Aqui está o que eu fiz para fazê-lo funcionar, e acho que é necessário para qualquer pessoa com um teclado numérico (ou qualquer outro sem botão pronto):
Eu criei uma função chamada
Isso também foi definido no arquivo .h.
Depois disso, vinculei ao bit 'touch down' do ViewController no Interface Builder.
Na função 'background is tapped', coloquei o seguinte:
Lembre-se de alterar 'answerField' para o nome do UITextField do qual você deseja remover o teclado (obviamente, verifique se o seu UITextField está definido como abaixo :)
Eu sei que esse tópico provavelmente morreu há muito tempo ... mas espero que isso ajude alguém, em algum lugar!
fonte
Você notará que o método "textFieldShouldReturn" fornece o objeto de campo de texto que pressionou a tecla DONE. Se você definir o TAG, poderá ativar esse campo de texto. Ou você pode acompanhar e comparar o ponteiro do objeto com algum valor de membro armazenado por seu criador.
Minha abordagem é assim para um auto-estudo:
Enquanto isso, coloquei o teste de "validação" que nega a renúncia. É apenas para ilustração, portanto, se o usuário digitar NÃO! no campo, não será descartado. O comportamento era como eu queria, mas a sequência de saída não era como eu esperava.
A seguir, minha saída do NSLog para essa negação, seguida pela aceitação. Você notará que estou retornando o resultado da demissão, mas eu esperava que ela retornasse FALSE para que eu denunciasse o chamador ?! Fora isso, ele tem o comportamento necessário.
fonte
Aqui está uma maneira bastante clara de finalizar a edição com a tecla Return ou com um toque em segundo plano.
No construtor Interface, incorpore seus campos em uma exibição da classe UIFormView
O que essa classe:
Aqui está o código:
Interface
Implementação
Subclassificando o formulário e substituindo o
textFieldValueIsValid:
método, você pode evitar o final da edição se o valor não estiver correto para o campo especificado.Se um campo tiver um representante definido no Interface Builder, o formulário não o altera. Não vejo muitos motivos para definir um delegado diferente para um campo específico, mas por que não…
Há várias maneiras de melhorar essa classe de exibição de formulário - Anexe um delegado, faça um layout, manipule quando os teclados cobrem um campo (usando o quadro currentEditingTextField), inicie automaticamente a edição para o próximo campo, ...
Pessoalmente, eu o mantenho no meu framework, e sempre o subclasse para adicionar recursos, geralmente é útil "como está".
Espero que ajude. Cheers all
fonte
se você quiser toda a edição de um UIViewController, poderá usar.
e se você deseja descartar uma ocultação de teclado UITextField em particular, use.
1. adicione delegado no seu viewcontroller.h
torne a delegação incapaz para o seu campo de texto.
self.yourTextField.delegate = self;
adicione esse método ao seu viewcontroller.
- (BOOL) textFieldShouldEndEditing: (UITextField *) textField {[textField resignFirstResponder]; retornar SIM;}
fonte
Defina programaticamente o delegado do UITextField em 3 segundos
Implemente UITextFieldDelegate no seu arquivo ViewController.Swift (por exemplo, classe ViewController: UIViewController, UITextFieldDelegate {)
// Mark: - manipulando delegado textField ..
fonte
Crie um hidekeyboard de função e vincule-o ao campo de texto no arquivo .xib e selecione DidEndOnExit
fonte
Se você criou a exibição usando o Interface Builder, use o seguinte Basta criar um método,
Apenas clique com o botão direito do mouse no campo de texto na exibição, defina o evento como Terminou ao sair e ligue-o ao método "dispensKeyboard".
O melhor guia para iniciantes é "Head First iPhone and iPad Development, 2nd Edition"
fonte
tente isso
fonte
fonte
Quem procura Swift 3
1) Verifique se o delegado do UITextField está conectado ao seu ViewController no Storyboard
2) Implemente UITextFieldDelegate no seu arquivo ViewController.Swift (por exemplo, classe ViewController: UIViewController, UITextFieldDelegate {)
3) Use o método delegado abaixo
fonte
É assim que eu descarto o teclado no Swift 4.2 e funciona para mim:
fonte
Swift 3, iOS 9 ou superior
@IBAction private func noteFieldDidEndOnExit(_ sender: UITextField) {}
UPD: Ainda funciona bem para mim. Acho que o cara que dedicou essa resposta simplesmente não entendeu que ele precisa vincular essa ação ao UITextField no storyboard.
fonte
fonte