#swift #swiftui #keyboard #ios15 #swift5.5
Вопрос:
Я пытаюсь добавить панель инструментов клавиатуры только для некоторых из моих TextField
в SwiftUI.
У меня есть представление, определенное следующим образом:
struct Test: View {
@State private var name: String = ""
@State private var address: String = ""
@State private var username: String = ""
@State private var password: String = ""
enum Field: Hashable {
case nameField
case addressField
case usernameField
case passwordField
}
@FocusState private var focusedField: Field?
var body: some View {
Form {
Section {
TextField("Name", text: $name)
.focused($focusedField, equals: .nameField)
.submitLabel(.next)
TextField("Address", text: $address)
.focused($focusedField, equals: .addressField)
.submitLabel(.next)
TextField("Username", text: $username)
.focused($focusedField, equals: .usernameField)
.submitLabel(.next)
SecureField("Password", text: $password)
.focused($focusedField, equals: .passwordField)
.submitLabel(.done)
}
}
.toolbar {
ToolbarItemGroup(placement: .keyboard) {
if focusedField == .addressField {
Button("Test", action: {})
}
Button("Done", action: {
print(focusedField)
})
}
}
}
}
Проблема в том, что кнопка дополнительной панели инструментов появляется, когда выбрано неправильное поле.
Я также пробовал использовать @FocusedValue
подобное:
...
@FocusedValue(.field) var field: Field?
...
TextField("Name", text: $name)
.focused($focusedField, equals: .nameField)
.submitLabel(.next)
.focusedValue(.field, .nameField)
...
.focusedValue(.field, .addressField)
...
.focusedValue(.field, .usernameField)
...
.focusedValue(.field, .passwordField)
...
.toolbar {
ToolbarItemGroup(placement: .keyboard) {
if field == .addressField {
Button("Test", action: {})
}
Button("Done", action: {
print(field)
})
}
}
Но это дает тот же результат. Это похоже на то, как если бы панель инструментов была выбрана до focused
того, как будет задано состояние.
Я не уверен, что это возможная ошибка, или я делаю это неправильно?
Хотя даже когда я получаю вышеописанную работу, это не решает мою общую проблему, связанную с тем, что мне нужна панель инструментов только для 1 из текстовых полей, однако, когда я пытаюсь настроить ее таким образом, я вообще не получаю панели инструментов.
.toolbar {
ToolbarItemGroup(placement: .keyboard) {
if field == .addressField {
Button("Test", action: {})
} else {
EmptyView()
}
}
}
Комментарии:
1. Похоже на ошибку, и я не могу придумать обходной путь.
2. Спасибо, я подал сообщение об ошибке, так как даже документы Apple предполагают, что это должно сработать developer.apple.com/documentation/SwiftUI/ToolbarItemPlacement/…