Текстовое поле отклоняется при установке фокуса нового текстового поля в iOS 16
У меня возникла проблема в бета-версии Xcode 14, где, как вы можете видеть на изображениях ниже, клавиатура закрывается после ввода некоторого текста, тогда как в iOS 15 клавиатура остается на месте, что мне и нужно.
что я делаю в.onSubmit
Я создаю новый элемент и программно устанавливаю его фокус.
iOS 15 (Xcode 13.4.1)
iOS 16 (Xcode 14, бета-версия 3)
МРЭ:
enum Focusable: Hashable {
case none
case row(id: UUID)
}
extension View {
func sync<T: Equatable>(_ field1: Binding<T>, _ field2: FocusState<T>.Binding ) -> some View {
self
.onChange(of: field1.wrappedValue) {
field2.wrappedValue = $0
}
.onChange(of: field2.wrappedValue) {
field1.wrappedValue = $0
}
}
}
class Store: ObservableObject {
struct Item: Identifiable {
var id = UUID()
var name: String
}
@Published var items = [Item]()
@Published var focusedItem: Focusable?
func createNewItem() {
let newItem = Item(name: "")
items.append(newItem)
focusedItem = .row(id: newItem.id)
}
}
struct ContentView: View {
@FocusState private var focusedItem: Focusable?
@StateObject var store = Store()
var body: some View {
NavigationView {
List {
ForEach($store.items) { $item in
TextField("", text: $item.name)
.focused($focusedItem, equals: .row(id: item.id))
.onSubmit(store.createNewItem)
}
}
.toolbar {
ToolbarItem(placement: .confirmationAction) {
Button("New item") {
store.createNewItem()
}
}
}
.sync($store.focusedItem, $focusedItem)
}
}
}