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 extensiona quaisquer controles de que precise para suportar TapGestures que atualmente não o fazem e chamar a onTapGesturefunção em combinação com self.endEditing()para fechar o teclado em qualquer situação desejada.