SwiftUI在列表上取消键盘导航链接项点击



我有一个项目列表和一个用于搜索关键字的文本字段。当我在列表中搜索并点击项目时,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)

}

因此,在导航到下一个视图之前,我想确保我的键盘是沮丧的。

查看实际问题的演示

如果你使用的是iOS 15

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

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

相关内容

  • 没有找到相关文章

最新更新