SwiftUI 添加全局点击隐藏键盘

需求场景:

当用户输入完毕,通过点击空白处,快捷实现键盘收起;同时也不影响其他正常的交互操作。

在UIKit中隐藏键盘的方法

  1. textField.resignFirstResponder()
  2. view.endEditing(true)

本质上是需要获取到承载键盘的视图

SwiftUI添加方法

SwiftUI 没有之前 View 的概念了,但是同样可以获取到整个 App 的 window,从而调用 endEditing。

给 UIApplication 增加 Extension

复制代码
// MARK: - 全局点击隐藏键盘分类
extension UIApplication {
    
    public func addTapHideKeyBoardGesture() {
        guard let window = windows.first else { return }
        
        let tapGesture = UITapGestureRecognizer(target: window, action: #selector(UIView.endEditing))
        tapGesture.requiresExclusiveTouchType = false
        tapGesture.cancelsTouchesInView = false
        tapGesture.delegate = self
        window.addGestureRecognizer(tapGesture)
    }
}

extension UIApplication: UIGestureRecognizerDelegate {
    public func gestureRecognizer(_ gestureRecognizer: UIGestureRecognizer, shouldRecognizeSimultaneouslyWith otherGestureRecognizer: UIGestureRecognizer) -> Bool {
        return true // 可以同时响应多个手势
    }
}

requiresExclusiveTouchType:默认为 true。这个属性是指是否允许多种手势输入,这里的多种包含触摸、遥控器、触控笔等,所以可以配置成 false
cancelsTouchesInView:默认为 true。这里设置为 false,主要为了不影响其他手势的识别。当前的 tap 手势被识别出来之后,也不会触发 UITouch 的 cancel 方法,因此就不会中断 UITouch 的传递。

最后加上手势识别

复制代码
.onAppear(perform: UIApplication.shared.addTapHideKeyBoardGesture)
相关推荐
zhongben123_8 小时前
从零开发一个打车APP:技术选型、系统架构与成本评估指南
大数据·运维·ios·系统架构·uni-app·web app
茶底世界之下8 小时前
人像清晰度加多少?用 Awaking 对照皮肤与发丝
ios
Anhty11 小时前
2026三款AI变声器测评:iOS男变女自然声线实测
人工智能·功能测试·ios·智能手机
传奇开心果编程11 小时前
组合优先开发范式:从汉字造字原理到声明式UI组件组合思想
android·flutter·ios·swiftui·移动开发·harmonyos·android jetpack
腾讯端服务12 小时前
一码Duo端-Kuikly-iOS折叠屏新UI适配实践
android·ui·ios·kotlin·鸿蒙
2501_9159184112 小时前
Windows 上开发 React Native iOS,真机调试、Fast Refresh 与打包 ipa
windows·vscode·react native·ios·个人开发·swift·敏捷流程
aiopencode1 天前
局域网设备抓包怎么做?用 TraceEagle 抓电视、游戏机和 IoT 流量
后端·ios
奇牙coding1 天前
GPT-5.5 报 401 invalid_api_key 怎么办?换密钥前按 4 层排查请求头、项目权限和端点
数据库·gpt·ios·ai
szp20051 天前
中文字幕烧进视频后整片空白:CoreText 低报行高,导出照样成功
ios·swift
二流小码农1 天前
HarmonyOS开发助手,0代码让元服务从开发到上架
android·ios·harmonyos