iOS 15 Случайное поведение панели инструментов клавиатуры SwiftUI

#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/…