如何检测 swiftui 中是否存在键盘

2024-05-17

我想知道按下按钮时键盘是否存在。我该怎么做?我已经尝试过,但我没有任何运气。谢谢。


使用该协议,KeyboardReadable,你可以符合任何View并从中获取键盘更新。

KeyboardReadable协议:

import Combine
import UIKit


/// Publisher to read keyboard changes.
protocol KeyboardReadable {
    var keyboardPublisher: AnyPublisher<Bool, Never> { get }
}

extension KeyboardReadable {
    var keyboardPublisher: AnyPublisher<Bool, Never> {
        Publishers.Merge(
            NotificationCenter.default
                .publisher(for: UIResponder.keyboardWillShowNotification)
                .map { _ in true },
            
            NotificationCenter.default
                .publisher(for: UIResponder.keyboardWillHideNotification)
                .map { _ in false }
        )
        .eraseToAnyPublisher()
    }
}

它的工作原理是使用合并并创建发布者,以便我们可以接收键盘通知。

通过一个示例来了解如何应用它:

struct ContentView: View, KeyboardReadable {
    
    @State private var text: String = ""
    @State private var isKeyboardVisible = false
    
    var body: some View {
        TextField("Text", text: $text)
            .onReceive(keyboardPublisher) { newIsKeyboardVisible in
                print("Is keyboard visible? ", newIsKeyboardVisible)
                isKeyboardVisible = newIsKeyboardVisible
            }
    }
}

您现在可以从isKeyboardVisible变量来了解键盘是否可见。

当。。。的时候TextField处于活动状态并显示键盘,打印以下内容:

键盘可见吗?真的

当按下回车键隐藏键盘时,会打印以下内容:

键盘可见吗?错误的

您可以使用keyboardWillShowNotification/keyboardWillHideNotification一旦键盘开始出现或消失就更新,并且keyboardDidShowNotification/keyboardDidHideNotification键盘出现或消失后更新的变体。我更喜欢will变体,因为当键盘显示时更新是即时的。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

如何检测 swiftui 中是否存在键盘 的相关文章

  • 从代码覆盖率中排除 SwiftUI 预览?

    我无法将代码覆盖率提高到最低限度 90 因为 XCode 考虑了 PreviewProvider 我应该怎么办 删除所有 SwiftUI 预览 或者有没有办法可以排除一些带有 PreviewProvider 关键字等的行 Xcode 版本
  • 快速更改 uiviewcontroller 的视图

    我创建一个新的UIViewController 我不使用故事板 这是我的代码 我想更改我的视图框架 这对我不起作用 我尝试添加viewWillAppear 还是不行 我知道我可以添加一个新的UIView去做吧 我可以更改视图控制器的视图吗
  • 在 Firebase 中值更改后删除观察者

    我在 ViewController 中有全局观察者 并且需要其中一些不同的观察者来获取特定值 如下所示 值改变一次后是否可以删除观察者 var ref Firebase url https
  • 在 Swift 中从另一个 ViewController 访问变量

    我有以下内容ViewController class PageContentViewController UIViewController var pageIndex Int 我如何访问pageIndex来自另一个 ViewControll
  • 检查 u 键是否被按下 Swift Cocoa [重复]

    这个问题在这里已经有答案了 我正在尝试检测是否U键是否被按下 如果是的话应该print BUT BUT 但我不确定如何检查不同的按键 因为按键的文档非常糟糕 我找到了带有键码的答案 但它们仅适用于 QWERTY 键盘 视图控制器 swift
  • 如何一次运行多个后台线程任务?

    我正在尝试循环遍历包含 2016 年 10 月日期的 String 对象数组 这意味着 31 个 String 对象 2016 年 10 月 1 日 2016 年 10 月 31 日 对于每个对象 我想从数据库检索一些数据并附加返回值 也是
  • 在 Swift 中监听 stdin

    目前 我正在尝试在我的 swift 应用程序中监听来自命令行的用户输入 我知道readLine 方法 但它并不真正符合我的需求 我想监听在命令行上插入的数据 就像用户在终端内按下 向上键 一样 类似于 Node js 中可以完成的事情 st
  • 使 Picker 与其他 BinaryInteger 类型兼容

    Picker仅当与以下一起使用时才能正常工作Int 当使用任何其他类型的BinaryInteger它根本不更新选择 为了解决这个问题 我想做一个CompatilibityPicker但我必须承认我的理解Binding实际上工作给我带来了很多
  • 核心数据推导表达式关键路径使用运算符作为中间组件

    我正在尝试编写一对多关系属性之和的派生表达式 我有一个商品和一个组 该商品有价格和总价 金额 价格 我想编写一个表达式 将该组的总价格作为其组成部分的总和 当我构建时出现错误 错误 属性配置错误 LAEItemGroup totalPric
  • 什么是 Swift 枚举字节表示?

    我有以下枚举 enum Enum UInt8 case A 0x00 case B 0x01 case C 0x10 我使用以下代码将其转换为NSData var value Enum C let data NSData bytes val
  • 如何在 SWIFT 中实现 Objective-C 回调处理程序?

    目标c代码如下所示 void signInAccountWithUserName NSString userName password NSString password completion void BOOL success compl
  • 需要显式管理 Swift Package 嵌套依赖项吗?

    我正在将 Carthage 库移至 Swift Package Manager 如果我的 Swift 包依赖于其他 Swift 包 我是否必须像使用 Carthage 一样将这些库显式链接到项目中 或者嵌套依赖项是否嵌入到 Swift 包中
  • 如何在 SwiftUI 中动态隐藏导航后退按钮

    我需要暂时地在异步操作期间隐藏视图中的后退按钮 我想防止用户在操作完成之前离开视图 隐藏它是可能的永久使用 navigationBarBackButtonHidden true 但是 显然用户在这种情况下无法返回 因此他们被卡住了 我缺少什
  • 如何为PDFView设置PDFPageOverlayViewProvider?

    更新 我正在尝试设置pageOverlayViewProvider for a PDFView并且它没有按预期工作 PDFPageOverlayViewProvider方法没有被调用 PDFViewDelegate方法运行良好 struct
  • 如何为除用户位置之外的所有点设置自定义注释?

    授权检查后 为了获取用户位置 我调用此 CLLocation 委托函数 func locationManager manager CLLocationManager didUpdateLocations locations CLLocati
  • 如何将 NSData 转换为多种类型 Int

    我通过 get NSData 获取磁力计调整寄存器 如下所示 lt 00001a1a 4f56f202 00000000 1dfd421b gt 我需要根据我访问的字节将其转换为 Int8 UInt8 Int16 UInt16 文档来源 s
  • 是否可以实现包含 nil 元素的 Swift SequenceType?

    我想实现一个可以包含 nil 元素的自定义可迭代类 类似于 Any 除了合同之外 符合 SequenceType 大部分都有效GeneratorType next 说当所有元素都用完时它应该返回 nil 有解决方法吗 这是一个 相当愚蠢的
  • 显示键盘时检测 UITextView 中属性文本的点击

    这是一个补充问题我之前的一个回答 https stackoverflow com a 32262426 3681880对这个问题检测 iOS 中 UITextView 中属性文本的点击 https stackoverflow com que
  • 计算属性作为谓词,以及作为 RealmSearchViewController 中的 sortProperty?

    我有一个领域对象Song with dynamic var title 我写了一个计算属性 sortedName它可以解决任何讨厌的前缀 如 The 或括号和标点符号 我想要我的RealmSearchViewController to us
  • 来自 IOS Xcode 的 Azure 推送通知错误

    我觉得我是世界上第一个尝试让 iOS 快速与 Azure 配合使用的人 但没有太多帮助 我跟着这个创建 iOS 应用程序 https azure microsoft com en us documentation articles app

随机推荐

  • 导出选定的行,其中按钮集合在数据表中不起作用

    我正在尝试仅从数据表中导出选定的行 通过将扩展选项设置为 csv 我可以成功将选定的行导出到 csv 文件 如下面的代码所示 buttons colvis selectAll selectNone extend csv text Expor
  • OWIN 可以替代 ASP.NET MVC 应用程序中的 DI 吗?

    大约一年前 在 Visual Studio 中创建时自动生成的 MVC 项目不包含任何有关 OWIN 的内容 作为再次申请并试图了解这些变化的人 我想知道 OWIN 是否可以替代我的 DI 据我了解 Startup Auth cs 中的以下
  • Glew+GLFW Win32 无依赖项 Visual Studio

    是否可以在不将文件复制到 C 的情况下构建并链接 Glew 和 GLFW 我找不到任何说明如何在不将 DLL 复制到 C 上的 Visual Studio 目录的情况下使用这些库的文档 我只想包含项目目录中所需的所有 dll 和 lib 文
  • 将数据追加到Python字典中

    我使用以下代码从键列表中初始化字典 z df1 2 value counts keys tolist mydict dict fromkeys z None 此外 我用过 value df2 2 value counts keys toli
  • 如何使用 asyncio/aiohttp 确定最佳缓冲区大小

    在 python 中使用 asyncio 时 我们如何确定 read 的最佳参数 12字节 100 字节 async with self session get url headers headers as response chunk s
  • 如何使 StringGrid 的列适合网格的宽度?

    我已经寻找解决方案很长时间了 但没有任何运气 有谁知道一个简单的方法来做到这一点 例如 我想拉伸网格的第二列以适应网格的宽度 Use the ColWidths财产 像这样 with StringGrid1 do ColWidths 1 C
  • 具有动态警报正文的快速本地通知

    所以我可以创建一个像这样的本地通知 var localNotification UILocalNotification localNotification fireDate NSDate timeIntervalSinceNow 7 loc
  • 为什么 std::string 分配两次?

    我写了一个自定义分配器std string and std vector如下 include
  • 在GDB中的每一行设置断点

    有没有办法用GDB在代码的每一行设置断点 明明我不想打b addr对于每一行 所以我想知道是否有一种快速的方法来做到这一点 Edit请注意 我正在运行由其他人创建的二进制文件 并且我无权访问源代码 不幸的是 该二进制文件尚未使用 g 标志进
  • 覆盖供应商自动加载编辑器

    有没有办法让您创建的自动加载文件在调用供应商自动加载之前运行 我们似乎遇到了 SimpleSAML 的自动加载覆盖我们创建的自动加载文件之一的问题 我是 Composer 的新手 似乎无法在网上找到任何解决方案 我尝试将我们的自动加载文件包
  • Django 中从 sqlite 迁移到 postgresql

    我想迁移自sqlite to PostgreSQL db 我安装了 postgresql 并在其 shell 上创建数据库 然后配置我的 django 设置如下 default ENGINE django db backends postg
  • 在 Chrome 中使用 React 添加新的 DOM 项目不会保持预期的滚动位置

    在 React 中向状态数组添加新项目时 我遇到了一个意外的问题 这会导致更多项目被添加到 DOM 中 在 Safari 和 Firefox 中 这会导致新的 DOM 项目添加到折叠下方 我必须向下滚动才能看到新项目 在 Chrome 中
  • Air for Android:动画导致我的游戏出现滞后

    我正在为 android 平台制作一款 cs6 air 游戏 当我为游戏制作动画时 我使用 3D 软件搅拌器 在 Blender 中 我制作了一个动画 然后将其渲染为一系列 PNG 图像 并将其导入到 Flash CS6 中 因此 如果我要
  • 如何创建不返回任何内容的函数

    我想写一个函数pl pgsql 我在用着Postgres 企业管理器 v3并使用 shell 来创建一个函数 但在 shell 中我必须定义返回类型 如果我不定义返回类型 我将无法创建函数 如何创建一个不返回结果的函数 即创建一个新表的函数
  • 显示即将到来的 Facebook 好友生日

    我仍然得到列表脸书好友以 的形式一月至十二月按升序排列 见下图 但现在我想以以下形式显示 Facebook 好友列表即将到来的生日 Like 最近的热门内容 我使用以下查询来获取好友列表 Log d LOG TAG requestFrien
  • 寻找网站测试自动化的方法

    我们开发定制调查网站 我正在寻找一种方法来自动化这些网站的模式测试 调查通常包含许多复杂的规则和分支 这些规则和分支也会根据项目的响应方式而触发 所有调查在发布给客户之前都经过严格测试 此测试需要大量的手动工作 我想了解一些可以通过回答问题
  • 良好的错误处理实践

    对于 ASP NET 站点来说 什么是良好的错误处理实践 例子 谢谢 与任何 net 项目一样 我发现最好的方法是仅捕获可能发生在给定页面上的特定错误类型 例如 您可以捕获用户给定输入的格式异常 以防 JavaScript 验证失败并且您没
  • 如何重现 Ridge(normalize=True) 的行为?

    这段代码 from sklearn pipeline import make pipeline from sklearn preprocessing import StandardScaler from sklearn linear mod
  • 外键和索引

    我有 2 张桌子 products and 类别 每个类别有很多产品 一个产品可以属于多个类别 products product id int primary auto increment name unique etc 类别 catego
  • 如何检测 swiftui 中是否存在键盘

    我想知道按下按钮时键盘是否存在 我该怎么做 我已经尝试过 但我没有任何运气 谢谢 使用该协议 KeyboardReadable 你可以符合任何View并从中获取键盘更新 KeyboardReadable协议 import Combine i