【问题标题】:SwiftUI Dismiss keyboard on List NavigationLink item tapSwiftUI 关闭 List NavigationLink 项目点击上的键盘
【发布时间】:2021-09-25 18:05:59
【问题描述】:

我有一个项目列表和一个用于搜索关键字的文本字段。当我在列表中搜索并点击项目时,navigationlink 的工作速度比键盘关闭快,这会导致下一个滚动视图中出现禁用区域。

// search TextField
  HStack {
                                    Spacer(minLength: 10)
                                    Image(systemName: "magnifyingglass")
                                        .foregroundColor(.gray)
                                    TextField("Search",
                                              text: self.$textbox){
                                        UIApplication.shared.endEditing()
                                    }
                                        .onChange(of: textbox) {
                                                        print($0)
                                          
                                            dictionaryListVM.getResult(language: self.currentLanguage, text: self.textbox)
                                                    self.theId += 1
                                                    }
                                        .accessibility(identifier: "loginUserName")
                                        .background(Color.white)
                                        
                                        .frame(height: 10, alignment: .leading)
                                        .padding()
                                    
                                    
                                }.overlay(
                                    RoundedRectangle(cornerRadius: 4)
                                        .stroke(Color.gray, lineWidth: 2)
                                    
                                    
                                )



// Subview for displaying items:
GeometryReader { reader in
            ScrollView {
                VStack {
                    if model.dataLoaded {
                List {
                
                    ForEach(self.model.englishDictionaries, id: \.id) { item in
                        
                        ZStack {
                            VStack(alignment: .leading, spacing: 4) {
                                Text("\(item.value)").font(.title2)
                                Text("\(item.pairWord)").foregroundColor(.gray).font(.caption)
                            }
                            NavigationLink(destination: WordDetailView(englishWordId: item.id, englishWord: item.value, lang: "en")) {
                              
                            }
                            .isDetailLink(false)
                            .buttonStyle(PlainButtonStyle()).frame(width:0).opacity(0)
                        }
                        
                    }
                }.frame(height:  reader.size.height)
                .animation(.linear)
                    }else{
                        Text("Words sync inprogress, please comeback later.")
                    }
                }
            }.padding(.leading, 10)
            
        }

所以,在导航到下一个视图之前,我想确保我的键盘处于沮丧状态。

查看demo 了解正在处理的问题

【问题讨论】:

  • 您是否尝试过使用@FocusState 处理您的案例?
  • @VisalRajapakse 不,它是 ios 14

标签: ios swift swiftui swiftui-navigationlink swiftui-navigationview


【解决方案1】:

如果您使用的是 iOS 15

我相信您可以使用 @FocusState 属性包装器来关闭键盘。

  1. 首先您必须定义一个变量来保存焦点值。
@FocusState private var isFocused: Bool
  1. .focused(_:) 视图修饰符添加到TextField
TextField("Hello There", text: $someText)
    .focused($isFocused)
  1. 在按钮按下或导航链接按下时切换$isFocused。可以如下图设置:
isFocused = false

【讨论】:

    猜你喜欢
    • 2020-02-09
    • 2020-11-12
    • 2020-05-17
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-05-22
    • 2021-10-24
    相关资源
    最近更新 更多