Estou usando UITextfied
enquanto clico no teclado textfied aparecer, mas quando pressionei a returntecla, o teclado não está desaparecendo. Eu usei o seguinte código:
func textFieldShouldReturn(textField: UITextField!) -> Bool // called when 'return' key pressed. return NO to ignore.
{
return true;
}
o método resignfirstresponder não está entrando na função.
ios
swift
uitextfield
Ashwinkumar Mangrulkar
fonte
fonte
Respostas:
Você pode fazer o aplicativo dispensar o teclado usando a seguinte função
Aqui está um exemplo completo para ilustrar melhor isso:
Origem do código: http://www.snip2code.com/Snippet/85930/swift-delegate-sample
fonte
UITextFieldDelegate
!func textFieldShouldReturn(textField: UITextField) -> Bool {
mude parafunc textFieldShouldReturn(_ textField: UITextField) -> Bool {
A
return true
parte disso informa apenas ao campo de texto se é permitido retornar ou não.Você deve informar manualmente o campo de texto para descartar o teclado (ou o que quer que seja o primeiro a responder), e isso é feito da seguinte
resignFirstResponder()
maneira:fonte
UITextFieldDelegate
?Adicione
UITextFieldDelegate
à declaração de classe:Conecte
textfield
ou escreva programaticamentedefina seu controlador de exibição como os campos de texto delegados na exibição foram carregados:
Adicione a seguinte função
com tudo isso, seu teclado começará a ser descartado tocando fora do campo de texto e pressionando a tecla Enter.
fonte
UITextFieldDelegate
... muito obrigado!Swift 4.2 - Não é necessário delegar
Você pode criar uma saída de ação do UITextField para a " Ação primária acionada " e renunciar a primeira resposta no parâmetro sender passado:
Super simples.
(Obrigado ao vídeo de 60 segundos de Scott Smith por me informar sobre isso: https://youtu.be/v6GrnVQy7iA )
fonte
Solução Simple Swift 3: Adicione esta função aos controladores de exibição que apresentam um campo de texto:
Em seguida, abra o editor assistente e verifique se o Main.storyboard está em um lado da sua visualização e o arquivo controller.swift da visualização desejado está no outro. Clique em um campo de texto e selecione no painel de utilitários do lado direito a guia 'Mostrar o Inspetor de Conexão'. Arraste a tecla Control de 'Terminou ao sair' para a função acima no seu arquivo rápido. Repita o procedimento para qualquer outro campo de texto nessa cena e vincule à mesma função.
fonte
@RSC
para mim, a adição crítica no Xcode Versão 6.2 (6C86e) está em
override func viewDidLoad()
Tentei fazê-lo funcionar com a chave de retorno por horas até encontrar sua postagem, RSC. Obrigado!
Além disso, se você deseja ocultar o teclado, se tocar em qualquer outro lugar na tela:
fonte
Para obter a dispensa automática do teclado, coloquei esse código em um dos métodos da classe do meu campo de texto personalizado:
Substitua o nome da sua tomada por
textField
.fonte
mytextfield.addTarget(nil, action:Selector(("firstResponderAction:")), for:.editingDidEndOnExit)
(versão Swift 5) em,viewDidLoad
mas nem retornei nem toquei em algum lugar fora do campo de texto funcionou. Eu consegui os campos de texto criando uma saída cada.viewDidAppear
método dessa classe.UIAlertController.addTextField(configurationHandler: {(textField: UITextField!) in textField.delegate = self textField.addTarget(self, action: #selector(MySubclass.textChanged(_:)), for: .editingChanged) })
Isso pode ser um pouco específico demais para o meu caso, mas espero que ajude. Tente fazer a ligação dentroviewDidAppear
e em conformidade com os delegados, se necessário.Outra maneira de fazer isso que usa principalmente o storyboard e permite facilmente que você tenha vários campos de texto é:
Conecte todos os seus campos de texto para esse controlador de exibição a essa ação no
Did End On Exit
evento de cada campo.fonte
Eu sugeriria iniciar a classe do RSC:
}
fonte
Quando o usuário toca no botão Concluído no teclado de texto, um evento Terminou ao sair será gerado; nesse momento, precisamos dizer ao campo de texto para abrir mão do controle para que o teclado desapareça. Para fazer isso, precisamos adicionar um método de ação à nossa classe de controlador. Selecione ViewController.swift e adicione o seguinte método de ação:
Selecione Main.storyboard no Project Navigator e abra o inspetor de conexões. Arraste do círculo ao lado de Terminou ao sair para o ícone amarelo do View Controller no storyboard e solte-o. Um pequeno menu pop-up aparecerá, contendo o nome de uma única ação, a que acabamos de adicionar. Clique na ação textFieldDoneEditing para selecioná-lo e pronto.
fonte
Aqui está a atualização do Swift 3.0 para o comentário do peacetype:
fonte
Detesto adicionar a mesma função a todos os UIViewController. Estendendo o UIViewController para oferecer suporte ao UITextFieldDelegate, você pode fornecer um comportamento padrão de "retorno pressionado".
Quando você cria novos UIViewController e UITextField, tudo o que você precisa fazer é escrever um código de linha no seu UIViewController.
Você pode até omitir esse código de uma linha conectando delegate no Main.storyboard. (Usando "ctrl" e arraste de UITextField para UIViewController)
fonte
Swift 3
Adicione este código abaixo ao seu VC
Funciona para mim
fonte
Verifique se o seu delegado textField está definido como o controlador de exibição no qual você está escrevendo seu código relacionado ao campo de texto.
fonte
Rápido
Usando a função opcional de
UITextFieldDelegate
.false
significa que esse campo pode ser solicitado a renunciar.true
- forçar demissão.fonte
então você usa esta função
fonte
você pode colocar isso em qualquer lugar, mas não em um UIButton
então você pode colocar esse código em um botão (também por exemplo):
isso funcionou para mim
fonte
No controlador de exibição que você está usando:
fonte
você deve conectar o UITextfied a um controlador de delegado de visão para tornar essa função chamada
fonte
Tudo em um ocultar o teclado e mover a exibição no teclado aberto: Swift 5
fonte