SwiftUI中几种关闭键盘的方式

在国内大多数app的操作中都有在带有输入框视图的页面中点击其他部分关闭键盘,因此给用户形成了一个操作习惯,于是在开发者自己开发的app中也需能够点击其他部分关闭键盘,不然会给用户造成困扰,在SwiftUI中,关闭弹出的键盘有几种常用的方式:

  1. 使用UIApplication.shared.sendAction方法:这是一种通用的方法,可以在任何地方使用。你只需要调用UIApplication.shared.sendAction并发送一个隐藏键盘的命令。

    UIApplication.shared.sendAction(#selector(UIResponder.resignFirstResponder), to: nil, from: nil, for: nil)
    

这行代码的工作原理如下:

  1. UIApplication.shared:
  • UIApplication.shared是对当前应用实例的引用。它提供了许多控制和配置应用行为的方法。
  1. sendAction(_:to:from:for:)方法:
  • sendAction(_:to:from:for:)是一个发送动作或事件的方法。这个方法可以用来触发特定的行为或命令。
  1. #selector(UIResponder.resignFirstResponder):
  • #selector(UIResponder.resignFirstResponder)是一个选择器,指向resignFirstResponder方法。resignFirstResponderUIResponder类的一个方法,用于放弃响应者状态,通常意味着隐藏键盘。在iOS中,当一个控件(如文本框)成为第一响应者时,键盘会显示。当它放弃第一响应者状态时,键盘会隐藏。
  1. to: nil, from: nil, for: nil:
  • 这些参数定义了动作发送的目标、来源和上下文。在这种情况下,它们都被设置为nil,意味着不指定特定的目标或来源,而是允许应用自动确定应该响应此动作的对象。
  • 通过执行这段代码,应用会查找当前成为第一响应者的UI元素(通常是一个激活的文本字段)并让它放弃其第一响应者状态,从而导致键盘被隐藏。
  • 这种方法的优点是它在SwiftUI中非常通用,不依赖于特定的UI组件或视图结构。然而,需要注意的是,这种方法使用了UIKit的API,这在纯SwiftUI的环境中可能不是最理想的选择。随着SwiftUI的不断发展,可能会出现更多纯SwiftUI的解决方案。
  1. 使用@FocusState属性(iOS 15及以上):@FocusState是iOS 15引入的一个属性,允许你管理特定视图的焦点状态。你可以使用它来控制哪个输入字段应该是活动的,并相应地显示或隐藏键盘。

    @FocusState private var isInputActive: Bool
    
    // 在某个视图上
    TextField("输入点什么", text: $text)
        .focused($isInputActive)
    
    // 然后可以设置isInputActive为false来隐藏键盘
    isInputActive = false
    
  2. 使用dismiss方法:在某些情况下,例如在FormSheet中,你可以直接使用dismiss方法来关闭键盘。

你可能感兴趣的:(swiftui,计算机外设,ios,swift)