Eu tenho procurado por tudo isso, mas não consigo encontrá-lo. Eu sei como descartar o teclado usando, Objective-C
mas não tenho idéia de como fazer isso usando Swift
? Alguém sabe?
ios
swift
uikeyboard
lagoa
fonte
fonte
Respostas:
Aqui está outra maneira de executar esta tarefa se você usar esta funcionalidade em vários
UIViewControllers
:Agora em todos
UIViewController
, tudo o que você precisa fazer é chamar esta função:Esta função está incluída como uma função padrão no meu repositório, que contém muitas Extensões Swift úteis como esta, confira: https://github.com/goktugyil/EZSwiftExtensions
fonte
didSelectRowAtIndexPath
.tap.cancelsTouchesInView = false
. Isso resolveu isso para mim, pelo menos. Espero que isso ajude alguémUma resposta para sua pergunta sobre como descartar o teclado no Xcode 6.1 usando o Swift abaixo:
( Fonte desta informação ).
fonte
Swift 4 trabalhando
Crie um ramal como abaixo e ligue
hideKeyboardWhenTappedAround()
no seu controlador de exibição Base.O mais importante é chamar o seu Controlador de exibição de base, para que você não precise ligar o tempo todo em todos os controladores de exibição.
fonte
Você pode ligar
em qualquer instância de um UIResponder, como um UITextField. Se você chamá-lo na exibição que atualmente está causando a exibição do teclado, o teclado será descartado.
fonte
fonte
para Swift 3 é muito simples
se você deseja ocultar o teclado ao pressionar a tecla RETURN
mas, no segundo caso, você também precisará passar o delegado de todos os campos de texto para o ViewController no Main.Storyboard
fonte
unrecognized selector sent to instance
com esse código.Swift 3: maneira mais fácil de descartar o teclado:
fonte
A resposta de Dash é correta e preferida. Uma abordagem mais "abrasadora" é chamar
view.endEditing(true)
. Isso causaview
e todas as suas subvisões pararesignFirstResponder
. Se você não tem uma referência à visualização que gostaria de descartar, esta é uma solução hacky, mas eficaz.fonte
swift 5 apenas duas linhas é suficiente. Adicionar ao seu
viewDidLoad
deve funcionar.Se o seu gesto de toque bloquear outros toques, adicione esta linha:
fonte
No storyboard:
fonte
Swift 3:
Extensão com
Selector
como parâmetro para poder fazer coisas adicionais na função de descartar ecancelsTouchesInView
evitar distorções com toques em outros elementos da vista.Uso:
fonte
Use o IQKeyboardmanager que o ajudará a resolver problemas fáceis .....
///////////////////////////////////////////
! [como desativar o teclado ..] [1]
fonte
Encontrei que a melhor solução incluía a resposta aceita do @Esqarrouth, com alguns ajustes:
A linha
tap.cancelsTouchesInView = false
era crítica: assegura queUITapGestureRecognizer
não impeça que outros elementos na exibição recebam interação do usuário.O método
dismissKeyboard()
foi alterado para um pouco menos elegantedismissKeyboardView()
. Isso ocorre porque na base de código bastante antiga do meu projeto, houve várias vezes em quedismissKeyboard()
já foi usada (acho que isso não é incomum), causando problemas no compilador.Então, como acima, esse comportamento pode ser ativado em Controladores de exibição individuais:
fonte
Se você usar uma exibição de rolagem, poderá ser muito mais simples.
Basta selecionar
Dismiss interactively
no storyboard.fonte
No Swift 4, adicione @objc:
No viewDidLoad:
Função:
fonte
Adicione esta extensão ao seu ViewController:
fonte
Para expandir a resposta de Esqarrouth , eu sempre uso o seguinte para descartar o teclado, especialmente se a classe da qual estou descartando o teclado não possui uma
view
propriedade e / ou não é uma subclasse deUIView
.E, por conveniência, a seguinte extensão da
UIApplcation
classe:fonte
fonte
Como programador iniciante, pode ser confuso quando as pessoas produzem respostas mais hábeis e desnecessárias ... Você não precisa fazer nada do complicado mostrado acima! ...
Aqui está a opção mais simples ... Caso o teclado apareça em resposta ao campo de texto - Dentro da função da tela de toque, adicione a função resignFirstResponder . Como mostrado abaixo - o teclado será fechado porque o Primeiro Respondente for liberado (saindo da cadeia do Respondente) ...
fonte
Eu uso IQKeyBoardManagerSwift para teclado. É fácil de usar. basta adicionar o pod 'IQKeyboardManagerSwift'
Importe IQKeyboardManagerSwift e escreva o código
didFinishLaunchingWithOptions
emAppDelegate
.fonte
Este liner renuncia o teclado de todos (qualquer) o UITextField em um UIView
fonte
Apenas uma linha de código no
viewDidLoad()
método:fonte
Em rápido você pode usar
fonte
Para Swift3
Registrar um reconhecedor de eventos em viewDidLoad
precisamos adicionar o gesto na visualização no mesmo viewDidLoad.
Então precisamos inicializar o método registrado
fonte
A postagem como uma nova resposta desde que minha edição da resposta de @ King-Wizard foi rejeitada.
Faça da sua turma um delegado do UITextField e substitua o touchesBegan.
Swift 4
fonte
Você também pode adicionar um reconhecedor de gesto de toque para renunciar ao teclado. : D
fonte
Outra possibilidade é simplesmente adicionar um botão grande sem conteúdo que esteja abaixo de todas as visualizações que você possa precisar tocar. Dê a ele uma ação chamada:
O problema com um reconhecedor de gestos era para mim, que também captou todos os toques que eu queria receber pelo tableViewCells.
fonte
Se você tiver outras visualizações que também receberão o toque, precisará definir
cancelsTouchesInView = false
Como isso:
fonte
Tente isso, está funcionando
fonte
Quando houver mais de um campo de texto na exibição
Para seguir a recomendação do @ modocache para evitar chamadas
view.endEditing()
, você pode acompanhar o campo de texto que se tornou o primeiro respondedor, mas isso é confuso e propenso a erros.Uma alternativa é chamar
resignFirstResponder()
todos os campos de texto no controlador de exibição . Aqui está um exemplo de criação de uma coleção de todos os campos de texto (que, no meu caso, eram necessários para o código de validação):Com a coleção disponível, é simples iterar por todos eles:
Agora você pode chamar
dismissKeyboard()
seu reconhecedor de gestos (ou onde for apropriado). A desvantagem é que você deve manter a lista deUITextField
s ao adicionar ou remover campos.Comentários bem-vindos. Se houver um problema ao chamar os
resignFirstResponder()
controles que não são os primeiros a responder, ou se houver uma maneira fácil e garantida, sem bugs, de rastrear o atual primeiro respondedor, eu adoraria ouvir sobre isso!fonte