SwiftUI @FocusState не фокусирует желаемое текстовое полеIOS

Программируем под IOS
Ответить
Anonymous
 SwiftUI @FocusState не фокусирует желаемое текстовое поле

Сообщение Anonymous »

У меня есть представление SwiftUI с несколькими TextFields и @FocusState, привязанное к моей модели представления. Я хочу, чтобы первое поле автоматически получало фокус всякий раз, когда появляется представление (при возвращении из SecondView). Вот минимальный пример:
импорт SwiftUI
импорт Объединение

Код: Выделить всё

class MyViewModel: ObservableObject {
enum Field: Hashable {
case field1
case field2
case field3
}

@Published var field1: String = ""
@Published var field2: String = ""
@Published var field3: String = ""

@Published var focusedField: Field? = nil
}

struct ContentView: View {
@StateObject private var viewModel: MyViewModel
@FocusState private var activeField: MyViewModel.Field?

init(viewModel: MyViewModel) {
self._viewModel = StateObject(wrappedValue: viewModel)
}

var body: some View {
NavigationStack {
VStack(spacing: 20) {
TextField("Field 1", text: $viewModel.field1)
.focused($activeField, equals: .field1)
.textFieldStyle(.roundedBorder)

TextField("Field 2", text: $viewModel.field2)
.focused($activeField, equals: .field2)
.textFieldStyle(.roundedBorder)

TextField("Field 3", text: $viewModel.field3)
.focused($activeField, equals: .field3)
.textFieldStyle(.roundedBorder)

NavigationLink("Go to Second View") {
SecondView()
}
.padding(.top, 40)
}
.padding()
.onAppear {
// Attempt to focus the first field
viewModel.focusedField = .field1
activeField = viewModel.focusedField
}
.onChange(of: activeField) { _, newValue in
viewModel.focusedField = newValue
}
.onChange(of: viewModel.focusedField) { _, newValue in
activeField = newValue
}
}
}
}

struct SecondView: View {
var body: some View {
VStack {
Text("Second View")
.font(.title)
Text("Go back to see focus issue")
.padding()
}
}
}
Что я делаю не так?

Подробнее здесь: https://stackoverflow.com/questions/798 ... -textfield
Ответить

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

Вернуться в «IOS»