Fala time!
Esses dias estava desenvolvendo o +Sangue e me deparei com a situação de precisar fazer o teclado abrir ja focado em um campo especifico na tela.
Em UIKit é comum fazermos isso mas como estou migrando a interface de UIKit para SwiftUI tiver que ir atrás pra ver se era possível realizar isso nativamente, levando em conta que o SwiftUI ainda está em constante evolução.
Para minha surpresa existe sim um jeito totalmente nativo para fazer isso! Vamos la!!
Primeiramente vamos criar um enum dentro da nossa View já que o contexto só diz respeito a View em si. Nesse caso criei um case para nosso campo de nome. Depois disso vamos criar uma nova variável usando uma property wrapper (Ex: @State, @Binding) do tipo @FocusState e vai ser do tipo do nosso enum e vamos colocar ela como opcional.
struct ContentView: View {
enum FocusedField {
case nameFieldFocus
}
@FocusState private var focusedField: FocusedField?
}
Indo para nosso Body, aqui eu simplifiquei a View para um melhor entendimento mas no nosso TextField vamos chamar a função focused passando o Binding da nossa variável focusedField por isso o $ na frente e vamos passar o equals igual o nosso case.
No onAppear vamos atribuir um valor a nossa variável que vai ser o valor do nosso case.
var body: some View {
TextField("Placeholder", text: .constant("sua binding var aqui"))
.focused($focusedField, equals: .nameFieldFocus)
.onAppear {
focusedField = .nameFieldFocus
}
}
Agora só rodar e ver nosso campo recebendo focus quando a tela abre.
Podemos usar esse FocusState também quando apertamos o submit button do teclado (AKA Done, Return ...) para criar uma lógica e fazer uma navegação entre os campos.
Espero que artigo ajude vocês nesse caminhada em SwiftUI
Comments