Ada*_*hus 6 focus keypress textfield swiftui
当我按下回车键或在文本字段外单击时,如何移除文本字段焦点?请注意,这是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 }
)
)
}
}
}
Run Code Online (Sandbox Code Playgroud)
然后单击 TextField 并对其进行编辑,然后单击 TextField 不会失去焦点的按钮。如何让它退出编辑模式并失去焦点。
如果我按 Return,我也想从 TextField 失去焦点。我将绑定初始化程序与 get 和 set 一起使用,因为我认为我可以以某种方式拦截按键并检测“返回”字符,但这不起作用。
任何帮助表示赞赏:-)
Tob*_*ink 15
只需添加一个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)
}
Run Code Online (Sandbox Code Playgroud)
根据前面的答案,我创建了一个.removeFocusOnTap
扩展,可以附加到任何在点击时应删除焦点的视图(我在背景视图上使用它)。它适用于 iOS 和 macOS。
public struct RemoveFocusOnTapModifier: ViewModifier {
public func body(content: Content) -> some View {
content
#if os (iOS)
.onTapGesture {
UIApplication.shared.sendAction(#selector(UIResponder.resignFirstResponder), to:nil, from:nil, for:nil)
}
#elseif os(macOS)
.onTapGesture {
DispatchQueue.main.async {
NSApp.keyWindow?.makeFirstResponder(nil)
}
}
#endif
}
}
Run Code Online (Sandbox Code Playgroud)
扩大:
extension View {
public func removeFocusOnTap() -> some View {
modifier(RemoveFocusOnTapModifier())
}
}
Run Code Online (Sandbox Code Playgroud)
以下是可能的变体
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)
}
}
)
}
}
}
Run Code Online (Sandbox Code Playgroud)
归档时间: |
|
查看次数: |
2720 次 |
最近记录: |