@State 错误我位于导航栏的 TextField - SwiftUI

Posted

技术标签:

【中文标题】@State 错误我位于导航栏的 TextField - SwiftUI【英文标题】:@State bugs my TextField located at navbar - SwiftUI 【发布时间】:2020-02-09 15:00:46 【问题描述】:

我的导航栏上有一个自定义文本字段,我不知道为什么会这样,但是当我点击任何字母时,我的键盘被隐藏了。

@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】:

好吧,如果没有更多代码,很难给你一个确定的答案,但很可能是使用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
                        
                )
        
    

【讨论】:

以上是关于@State 错误我位于导航栏的 TextField - SwiftUI的主要内容,如果未能解决你的问题,请参考以下文章

禁用隐藏导航栏的触摸

是否可以将 UIView 的顶部固定到导航栏的底部?

如果用户登录或未登录,实现条件导航栏的策略

推送时出现大标题导航栏和搜索栏的错误

在 Cloudfront 自定义错误响应中,有没有办法强制更新浏览器导航栏的重定向?

底部导航栏的 Oncreate 视图问题