当我按Return键或在Textfield外部单击时,如何删除Textfield焦点? 请注意,这是 MacOS 上的SwiftUI。
如果我这样做:
import SwiftUI
struct ContentView: View {
@State var field1: String = "This is the Text Field View"
var body: some View {
VStack{
Button("Press") {
print("Button Pressed")
}
TextField("Fill in Text", text: Binding(
get: { print("get") ; return self.field1 },
set: { print("set") ; self.field1 = $0 }
)
)
}
}
}
然后单击进入TextField并对其进行编辑,然后单击Button,TextField不会失去焦点。如何使其退出编辑模式并失去焦点。
如果我按Return键,我也想从TextField中失去焦点。 我将Binding初始化程序与get和set一起使用,因为我认为我可以以某种方式拦截按键并检测“ Return”字符,但这不起作用。
任何帮助表示赞赏:-)
答案 0 :(得分:1)
这里是可能的变体
import SwiftUI
import AppKit
struct ContentView: View {
@State var field1: String = "This is the Text Field View"
var body: some View {
VStack{
Button("Press") {
print("Button Pressed")
NSApp.keyWindow?.makeFirstResponder(nil)
}
TextField("Fill in Text", text: Binding(
get: { print("get") ; return self.field1 },
set: { print("set") ; self.field1 = $0 }
), onCommit: {
DispatchQueue.main.async {
NSApp.keyWindow?.makeFirstResponder(nil)
}
}
)
}
}
}
答案 1 :(得分:0)
只需将onTapGesture
添加到您的VStack
中并添加以下行:
UIApplication.shared.sendAction(#selector(UIResponder.resignFirstResponder), to:nil, from:nil, for:nil)
此代码将关闭键盘。
示例:
VStack {
// ...
}.onTapGesture {
UIApplication.shared.sendAction(#selector(UIResponder.resignFirstResponder), to:nil, from:nil, for:nil)
}