@State ошибки моего TextField, расположенного на панели навигации - SwiftUI - PullRequest
1 голос
/ 09 февраля 2020

У меня есть пользовательское TextField, которое находится на моей панели навигации, я не знаю, почему это происходит, но когда я нажимаю на любую букву, моя клавиатура скрывается.

enter image description here

@State var value = ""

// Body view calls
.navigationBarItems(trailing: SearchBar())

func SearchBar() -> some View {
    if (isSearchMode) {
        return (
            AnyView(
                CustomTextField(
                    text: $value,
                    isFirstResponder: true,
                    placeholder: "Testing",
                    keyboardType: UIKeyboardType.webSearch
                )
                .frame(width: 300, height: 50)
                .padding()
            )
        )
    }
   return AnyView(
        Image(systemName: "magnifyingglass")
            .imageScale(.large)
            .gesture(
                TapGesture()
                    .onEnded { _ in
                        self.isSearchMode = true
                    }
            )
    )

}

1 Ответ

0 голосов
/ 09 февраля 2020

Что ж, трудно дать вам точный ответ без большого количества вашего кода, но, скорее всего, используется AnyView. Когда вы используете AnyView и некоторые @State изменения, приводящие к его перерисовке, он теряет любое другое состояние, такое как редактирование.

Вы можете исправить это, изменив SearchBar() на следующее:

func SearchBar() -> some View {
    Group {
        if (isSearchMode) {
            CustomTextField(
                text: $value,
                isFirstResponder: true,
                placeholder: "Testing",
                keyboardType: UIKeyboardType.webSearch
            )
            .frame(width: 300, height: 50)
            .padding()
        } else {
            Image(systemName: "magnifyingglass")
                .imageScale(.large)
                .gesture(
                    TapGesture()
                        .onEnded { _ in
                            self.isSearchMode = true
                        }
                )
        }
    }
}
...