ios - SwiftUI TextField 重置任何点击的焦点
问题描述
我想这样做:单击除当前“文本字段”和键盘之外的任何元素 - 调用失去焦点的逻辑。
struct ContentView: View {
@State private var text: String = ""
var body: some View {
VStack {
Text("Hello, world!")
TextField(
"Title TextField",
text: self.$text,
onEditingChanged: {
print("onEditingChanged: \($0)")
},
onCommit: {
print("onCommit")
}
)
.onSubmit {
print("onSubmit")
}
Button("Print") {
print("text: \(self.text)")
}
}
}
}
我想做一个通用的解决方案,而不需要手动隐藏键盘。
我需要这个,因为 TextField 在 iOS 14 和 iOS 15 中有不同的逻辑。
iOS 14:关闭键盘后值发生变化。
iOS 15:从键盘输入时值发生变化。
解决方案
我使用这个扩展:
extension UIApplication {
func endEditing() {
sendAction(#selector(UIResponder.resignFirstResponder), to: nil, from: nil, for: nil)
}
}
然后在我的身体里:
.onTapGesture {
UIApplication.shared.endEditing()
}
推荐阅读
- td-engine - 在 TDengine 中联合所有
- html - 如何在部分中使用包装器 div 和使用 flexbox
- python - Flask 文件在不同路径中的读写
- github - SonarQube 检查代码然后传递给 git/repo
- java - Aspose 单元格 - 在 Linux 机器上将 html 工作簿保存到 Xlsx 时结果不佳
- java - 如何在recyclerview(FirebaseRecyclerOptions)中为特定用户显示所有孩子
- xml - 通过 Internet Explorer 进行屏幕抓取
- azure-api-management - 向后端发送请求时,如何设置我的 apim 资源以验证来自请求标头的访问令牌?
- kotlin - 当我使用 rememberSaveable 时,哪些不同的变量会被解构?
- laravel - 渲染模型时,如何默认使用刀片模板而不是 json?