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方法来关闭键盘。

相关推荐

  1. SwiftUI关闭键盘方式

    2024-01-30 13:44:01       54 阅读
  2. Vue下载不同文件方式

    2024-01-30 13:44:01       67 阅读
  3. Spring Boot 实现跨域方式

    2024-01-30 13:44:01       63 阅读
  4. css垂直水平居实现方式

    2024-01-30 13:44:01       56 阅读
  5. vue 项目常用import 书写 方式

    2024-01-30 13:44:01       50 阅读
  6. Spring实现策略模式方式

    2024-01-30 13:44:01       27 阅读
  7. Hive小文件过多处理方式

    2024-01-30 13:44:01       37 阅读
  8. PEFT方式

    2024-01-30 13:44:01       23 阅读

最近更新

  1. docker php8.1+nginx base 镜像 dockerfile 配置

    2024-01-30 13:44:01       98 阅读
  2. Could not load dynamic library ‘cudart64_100.dll‘

    2024-01-30 13:44:01       106 阅读
  3. 在Django里面运行非项目文件

    2024-01-30 13:44:01       87 阅读
  4. Python语言-面向对象

    2024-01-30 13:44:01       96 阅读

热门阅读

  1. 《设计模式的艺术》笔记 - 访问者模式

    2024-01-30 13:44:01       44 阅读
  2. MySQL安全(二)SQL注入

    2024-01-30 13:44:01       56 阅读
  3. 在Ubuntu Linux上安装Chrome浏览器的最佳方法

    2024-01-30 13:44:01       68 阅读
  4. ubuntu 安装 nvidia 驱动

    2024-01-30 13:44:01       72 阅读
  5. HarmonyOS ArkUI基础学习01

    2024-01-30 13:44:01       65 阅读
  6. ubuntu 安装python3.10

    2024-01-30 13:44:01       64 阅读
  7. nginx一直Nginx 502 bad gateway

    2024-01-30 13:44:01       56 阅读
  8. 软件工程学科的本质

    2024-01-30 13:44:01       58 阅读
  9. ROS学习笔记8:TF坐标变换

    2024-01-30 13:44:01       55 阅读
  10. 如何发布自己的npm包

    2024-01-30 13:44:01       43 阅读