推送通知 - 使用 SceneDelegate 在通知点击时推送 ViewController

2024-02-08

在 iOS 13 之前,导航控制器和根视图是在 AppDelegate 中定义的。然而,在 iOS 13 中,Apple 引入了 SceneDelegate,它接管了这些视图函数的处理。然而,AppDelegate 仍然处理诸如本地通知处理之类的事情。请参阅此答案以获取一些概述根视图的这些更改的代码。 https://stackoverflow.com/a/58405507

如果我希望在用户点击本地通知时推送视图,我会在 AppDelegate 中执行如下操作:

extension AppDelegate: UNUserNotificationCenterDelegate {

    var navigationController: UINavigationController?

    func userNotificationCenter(_ center: UNUserNotificationCenter, didReceive response: UNNotificationResponse, withCompletionHandler completionHandler: @escaping () -> Void) {

        if response.actionIdentifier == UNNotificationDefaultActionIdentifier { //User taps notification
             let vc = MyViewController()
             self.navigationController?.pushViewController(vc, animated: true)
        }
    }
}

但是,由于从 iOS 13 开始,我的项目的根导航控制器现在可以在 SceneDelegate 中定义,因此我似乎无法弄清楚如何在由 SceneDelegate 而不是 AppDelegate 管理的导航控制器中推送视图。


SceneDelegate可以这样处理通知响应:

class SceneDelegate: UIResponder, UIWindowSceneDelegate {
  func scene(
    _ scene: UIScene,
    willConnectTo session: UISceneSession,
    options connectionOptions: UIScene.ConnectionOptions
  ) {
    if let windowScene = scene as? UIWindowScene {
      let window = UIWindow(windowScene: windowScene)
      // rootViewController set up code
      // say,
      // let mainController = ViewController()
      // let navigationController = UINavigationController(rootViewController: mainController)
      // window.rootViewController = navigationController

      // This is UNNotificationResponse
      if let notificationResponse = connectionOptions.notificationResponse {
        window.makeKeyAndVisible()
        // do the pushing on your navigation controller
        // navigationController.push()
        return
      }

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

推送通知 - 使用 SceneDelegate 在通知点击时推送 ViewController 的相关文章

  • 什么是 WKWebView 中的 WKErrorDomain 错误 4

    fatal error LPWebView encounters an error Error Domain WKErrorDomain Code 4 A JavaScript exception occurred UserInfo 0x7
  • UIView晃动动画

    我试图在按下按钮时使 UIView 摇动 我正在调整我找到的代码http www cimgf com 2008 02 27 core animation tutorial window shake effect http www cimgf
  • 如何为 iPhone 6+、6 和 5 指定不同尺寸?

    我想让 iPhone 6 6 和 5 上的视图看起来几乎相同 在附图中 我的意思是 例如 取消 按钮在 iPhone 5 中距离屏幕左边缘应为 30 像素 在 6 中为 35 像素 在 6 中为 45 像素 其他元素也类似 如何为每种类型设
  • 在 iOS 应用程序中拨打电话

    我有一些代码尝试在应用程序中进行调用 但它似乎不起作用 UIApplication myApp UIApplication sharedApplication NSString theCall NSString stringWithForm
  • Swift:设置协议的可选属性

    如何设置协议的可选属性 例如 UITextInputTraits 有许多可选的读 写属性 当我尝试以下操作时 出现编译错误 无法分配给 textInputTraits 中的 keyboardType func initializeTextI
  • Xamarin - 错误:dsymutil 退出,代码为 72

    最近升级到 VS for Mac 8 10 21 在构建应用程序时 我得到 Xamarin Shared targets 3 3 Error dsymutil exited with code 72 这是 Xcode 13 3 的情况 完整
  • 如何删除 UITableView 中的缩进?

    首先 我对此很陌生 我很可能忘记了一些非常简单的事情 问题 我正在制作一个应用程序 在 a 中显示来自 imgur com 的随机图像tableView 由于某种原因 所有单元格都会缩进少量 如下图所示 我摆弄了许多设置storyboard
  • 我的 UICollectionView 无法使用 Swift 平滑滚动

    我有一个CollectionView它使单元出队取决于message类型 例如 文本 图像 我遇到的问题是当我向上 向下滚动时滚动确实很不稳定 因此用户体验不是很好 这仅在第一次加载单元格时发生 之后滚动就会平滑 我有什么想法可以解决这个问
  • SwiftUI:隐藏键盘但显示光标

    我想使用自定义按钮将文本输入到TextField 但仍显示并移动光标 有没有办法隐藏默认键盘 同时仍然显示光标 我希望有这样的事情 TextField text text keyboardType none 这是它目前的样子 您可以使用UI
  • 在 iOS 上使用 RNCryptor 异步解密大文件

    我需要在 iOS 上使用 RNCryptor 异步解密一个大文件 以便显示进度条 我在任何地方都找不到示例 因此尝试了我猜对的方法 但是 我想出的方法不起作用 解密器的处理程序从未被调用 并且线程在发送所有数据后因 EXC BAD ADDR
  • 使用 UITabBarController 时覆盖整个屏幕的视图?

    我想在 UITabBarController 设置中在整个屏幕上覆盖 HUD 样式的透明图形 执行此操作的按钮位于第一个选项卡的屏幕 FirstViewController 中 并且覆盖层也应该覆盖选项卡 这可能吗 您可以将新视图直接附加到
  • NSPredicate IN 从数组元素查询

    对于一个古怪的标题表示歉意 我有一个 Int 数组 我想定义一个 NSPredicate 来过滤掉 connectionType 等于数组中包含的值的项目 所以基本上是这样的 fetchRequest predicate NSPredica
  • 如何使用 IOS 12 在 UITableViewCell 中正确添加 UICollectionView

    由于某些原因 在使用 Xcode 10 beta 时 我无法正确显示 tableview 单元格内集合中的某些项目 在过去的四天里我尝试了我所知道的一切 我做了一个小项目样本来看看我的问题是什么 如果有人想在本地运行完整代码 请参见此处 h
  • 防止 iOS 键盘在 cordova 3.5 中滚动页面

    我正在使用 Cordova 3 5 和 jQuery mobile 构建 iOS 应用程序 我在大部分应用程序中禁用了滚动功能 但是 当我选择输入字段时 iOS 键盘会打开并向上滚动页面 我不想要这个功能 由于输入足够高 键盘不会覆盖它 我
  • 在 SwiftUI 中使用可观察对象切换视图

    我正在练习尝试使用 SwiftUI 中的可观察对象切换视图 但我的代码无法正常工作 我知道我可以用 State 来做到这一点 但我想用可观察的对象来实现这一点 当我单击内容视图中的图像时 图像不会改变 有人能帮我吗 内容视图 swift i
  • Mac 上的 Delphi - 可能吗? [关闭]

    Closed 此问题正在寻求书籍 工具 软件库等的推荐 不满足堆栈溢出指南 help closed questions 目前不接受答案 我负责一个 Delphi Win32 项目管理应用程序 我刚刚完成了向 Delphi 2009 的迁移
  • 在 Object 子类及其自己的子类上实现ignoreProperties()

    我是领域新手 我正在使用继承自 Object 的基类以及该基类的自定义子类创建模型 我的模型要求基类通过覆盖静态来声明一些属性被忽略ignoredProperties 方法 当尝试在某些基类子类上重写该方法时 我收到一个 Swift 编译器
  • 使用强光混合模式时突出显示伪影

    我正在 iPhone 应用程序中使用顶部图像的 HardLight 混合模式混合两个图像 它看起来像这样 UIGraphicsBeginImageContext size sourceImage drawInRect rectangle b
  • 上传存档错误:“缺少 iOS 发行版签名身份......”

    我正在尝试使用 Xcode 将我的 iOS 应用程序存档上传到 iTunes Connect 但是当我单击 上传到 App Store 时 出现错误 Xcode 尝试查找或生成匹配的签名资产并 由于以下问题未能做到这一点 缺少 iOS 为
  • 节拍匹配算法

    我最近开始尝试创建一个移动应用程序 iOS Android 它将自动击败比赛 http en wikipedia org wiki Beatmatching http en wikipedia org wiki Beatmatching 两

随机推荐

  • PyQt:当内容更改时如何处理小部件的自动调整大小

    当 qt4 小部件的内容发生变化时 我遇到了一些大小问题 我将用两个简单的场景来说明我的问题 场景一 我有一个 QLineEdit 小部件 有时 当我使用 QLineEdit setText 更改其内容时 单行字符串不再适合其当前大小的小部
  • SQL Server 2005 和 SQL Server 2008 之间是否存在冲突?

    我被告知带有 BI 工具的 SQL Server 2005 安装和带有 BI 工具的 SQL Server 2008 不能在同一台计算机上一起工作 显然 一些 事情停止工作 这是我的一位团队成员告诉我的 由于我是 SQL BI 的新手 所以
  • Python:跨文件块边界的正则表达式匹配

    巨大的纯文本数据文件 我使用 python 读取了一个大文件 然后我在该块上应用正则表达式 我想根据一个标识符标签提取相应的值 由于块大小的原因 数据在块边界处丢失 要求 必须以块的形式读取文件 块大小必须小于 或等于 1 GiB Pyth
  • 与 Facebook Graph API 相关的问题

    实际上我正在使用该代码来获取 Facebook 帖子数据 Facebook CURL OPTS CURLOPT SSL VERIFYPEER false Facebook CURL OPTS CURLOPT SSL VERIFYHOST 2
  • 如何从environment.rb或初始化程序中强制RAILS_ENV=development?

    我们的主机不允许我们修改乘客配置文件 即 apache 配置或 vhosts 文件 但我们希望在开发模式下运行 Rails 因此 我们必须在应用程序重新启动时 Rails 加载的文件之一中指定环境 prod dev test 有人知道怎么做
  • 如何使用 Modernizr 测试第 n 个孩子?

    我正在尝试使用 Modernizr 来测试 nth child浏览器支持 但我不知道该怎么做 我找到了这个http jsfiddle net laustdeleuran 3rEVe http jsfiddle net laustdeleur
  • System.Timers.Timer (.NET) 真的很慢吗?

    我的印象是 System Timers Timer 创建自己的线程 并且 Microsoft 建议使用这种类型的计时器来执行更准确计时的任务 与在 UI 线程中运行的 Windows Forms Timer 相反 下面的代码 我认为 应该可
  • Service Worker 和网页之间的通信

    我正在开发一个应用程序 其目标是定期 例如每小时 向用户发送通知 我的想法是使用一个服务工作者 该服务工作者可以在选项卡关闭后运行 并继续向用户发送这些通知 网页需要能够与 Service Worker 沟通有关这些通知的具体细节 消息应该
  • 如何在Ubuntu下使用SVN 1.8和Eclipse?

    我们刚刚升级到SVN 1 8 不幸的是没有人想到我们 Linux 人 有没有办法将 Eclipse 连接到 SVN 1 8 的回购协议多米尼克 斯塔德勒 https launchpad net dominik stadler 多次提到升级到
  • 根据 Zingchart 中的列值进行多重绘图并更改线条颜色

    背景资料 我想将 gnuplot 图移植到 Zingchart 我添加了 gnuplot 源代码以更好地解释我的目标 reset set autoscale set term canvas rounded solid butt size 1
  • 如何在 Cloud Run 上部署 Typescript 项目

    Cloud Run error The user provided container failed to start and listen on the port defined provided by the PORT 8080 env
  • 选择随机记录并在一个查询中更新相同记录?

    我正在开发一个小型横幅旋转脚本 该脚本从数据库加载随机横幅 我正在跟踪数据库中的印象 想知道是否可以选择随机记录并在单个查询中更新其印象值 或者我是否需要选择随机记录 然后根据记录 pk 进行更新 使用MySQL 这无法在单个查询中完成 最
  • 限制 Django 表中的行数

    我的模型文件中有一个表 我想将其设计为表中的行数限制为十行 当超过限制时 最旧的行将被删除 对于某些上下文 这是前端的显示 向用户显示他们最近访问过的十个链接 我是 Django 新手 所以如果有人对如何做到这一点有建议 我将不胜感激 你可
  • elf 格式的可执行文件和可重定位文件有什么区别?

    elf 格式的可执行文件和 elf 格式的可重定位文件有什么区别 如您所知 每个编译后的可执行文件都是具有相对地址和绝对地址的二进制文件 因此可重定位格式是一种格式 其中函数和其他符号仍然具有名称定义 换句话说 函数和变量不绑定到任何特定地
  • 如何在 IntelliJ IDEA 13(或 WebStorm)上远程运行 mocha 测试?

    IntelliJ IDEA 13 通过 Node js 插件对 Mocha 测试提供了非常出色的支持 https www jetbrains com idea webhelp running mocha unit tests html ht
  • python udp客户端超时机制

    如果服务器套接字中生成的兰特数小于4 我的客户端套接字将暂停接收数据 我需要设置超时机制以允许客户端套接字检测到 超时 然后继续发送消息 在我运行服务器套接字然后运行客户端套接字后 出现以下错误消息 Traceback most recen
  • FirebaseTableViewDataSource 在用户注销和登录时崩溃

    我的应用程序有一个 UITableViewController 它使用 FirebaseTableViewDataSource 来自 FirebaseUI 该表正确显示了用户添加书签的帖子 但是当我注销该用户并登录另一个用户时 应用程序崩溃
  • JAVA 无法从另一个类中绘制到 JFrame 上

    我知道这是我的错误 我的问题是为什么这不起作用我错过了什么我可以称之为我把它放在一个方法而不是一个类所以我假设他们的第三个类有问题 第 1 类 package assignment pkg1 java import java awt Col
  • 打开模态表单,其中包含从另一个 ngx-formly 表单从 ngx-formly 创建的表单

    我目前正在使用 ngx formly 从 JSON 动态创建一堆 Angular 表单 效果非常好 我有一个特殊的用例 其中表单上的自定义按钮应该在单击时打开一个包含另一个表单的模式对话框 该对话框还包含使用 ngx formly 创建的表
  • 推送通知 - 使用 SceneDelegate 在通知点击时推送 ViewController

    在 iOS 13 之前 导航控制器和根视图是在 AppDelegate 中定义的 然而 在 iOS 13 中 Apple 引入了 SceneDelegate 它接管了这些视图函数的处理 然而 AppDelegate 仍然处理诸如本地通知处理