在国内大多数app的操作中都有在带有输入框视图的页面中点击其他部分关闭键盘,因此给用户形成了一个操作习惯,于是在开发者自己开发的app中也需能够点击其他部分关闭键盘,不然会给用户造成困扰,在SwiftUI中,关闭弹出的键盘有几种常用的方式:
使用
UIApplication.shared.sendAction
方法:这是一种通用的方法,可以在任何地方使用。你只需要调用UIApplication.shared.sendAction
并发送一个隐藏键盘的命令。UIApplication.shared.sendAction(#selector(UIResponder.resignFirstResponder), to: nil, from: nil, for: nil)
这行代码的工作原理如下:
- UIApplication.shared:
UIApplication.shared
是对当前应用实例的引用。它提供了许多控制和配置应用行为的方法。
- sendAction(_:to:from:for:)方法:
sendAction(_:to:from:for:)
是一个发送动作或事件的方法。这个方法可以用来触发特定的行为或命令。
- #selector(UIResponder.resignFirstResponder):
#selector(UIResponder.resignFirstResponder)
是一个选择器,指向resignFirstResponder
方法。resignFirstResponder
是UIResponder
类的一个方法,用于放弃响应者状态,通常意味着隐藏键盘。在iOS中,当一个控件(如文本框)成为第一响应者时,键盘会显示。当它放弃第一响应者状态时,键盘会隐藏。
- to: nil, from: nil, for: nil:
- 这些参数定义了动作发送的目标、来源和上下文。在这种情况下,它们都被设置为
nil
,意味着不指定特定的目标或来源,而是允许应用自动确定应该响应此动作的对象。- 通过执行这段代码,应用会查找当前成为第一响应者的UI元素(通常是一个激活的文本字段)并让它放弃其第一响应者状态,从而导致键盘被隐藏。
- 这种方法的优点是它在SwiftUI中非常通用,不依赖于特定的UI组件或视图结构。然而,需要注意的是,这种方法使用了UIKit的API,这在纯SwiftUI的环境中可能不是最理想的选择。随着SwiftUI的不断发展,可能会出现更多纯SwiftUI的解决方案。
使用
@FocusState
属性(iOS 15及以上):@FocusState
是iOS 15引入的一个属性,允许你管理特定视图的焦点状态。你可以使用它来控制哪个输入字段应该是活动的,并相应地显示或隐藏键盘。@FocusState private var isInputActive: Bool // 在某个视图上 TextField("输入点什么", text: $text) .focused($isInputActive) // 然后可以设置isInputActive为false来隐藏键盘 isInputActive = false
使用
dismiss
方法:在某些情况下,例如在Form
或Sheet
中,你可以直接使用dismiss
方法来关闭键盘。