Текстовое поле отклоняется при установке фокуса нового текстового поля в 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)
        }
    }
}

0 ответов

Другие вопросы по тегам