Este método permite ocultar o teclado em espaçadores!
Primeiro adicione esta função (Crédito dado a: Casper Zandbergen, do SwiftUI não pode tocar no espaçador do HStack )
extension Spacer {
public func onTapGesture(count: Int = 1, perform action: @escaping () -> Void) -> some View {
ZStack {
Color.black.opacity(0.001).onTapGesture(count: count, perform: action)
self
}
}
}
Em seguida, adicione as 2 funções a seguir (Crédito dado a: rraphael, desta questão)
extension UIApplication {
func endEditing() {
sendAction(#selector(UIResponder.resignFirstResponder), to: nil, from: nil, for: nil)
}
}
A função abaixo seria adicionada à sua classe View, apenas consulte a principal resposta aqui de rraphael para mais detalhes.
private func endEditing() {
UIApplication.shared.endEditing()
}
Finalmente, você pode simplesmente ligar para ...
Spacer().onTapGesture {
self.endEditing()
}
Isso fará com que qualquer área do espaçador feche o teclado agora. Não há mais necessidade de uma grande visão de fundo branco!
Você poderia, hipoteticamente, aplicar esta técnica extension
a quaisquer controles de que precise para suportar TapGestures que atualmente não o fazem e chamar a onTapGesture
função em combinação com self.endEditing()
para fechar o teclado em qualquer situação desejada.