@State破坏了我位于导航栏的TextField-SwiftUI

时间:2020-02-09 15:00:46

标签: ios swift swiftui navbar textfield

我在导航栏上有一个自定义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 :(得分:0)

在没有更多代码的情况下很难给您肯定的答案,但是很可能使用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
                        }
                )
        }
    }
}