ios - 检查特定视图控制器是否在 App 委托的前台打开
问题描述
我已经在我的应用程序中实现了推送通知。现在,当我的应用程序处于前台时,我想检查任一用户是否在聊天屏幕上,我尝试了各种代码,但它不起作用。我的聊天屏幕出现在这种情况下,首先我在最后一个标签下有标签栏控制器,当我点击它打开聊天屏幕时,标签栏控制器->最后一个标签 VC->聊天 VC。如果用户在前台并且通知到达,我想检查应用程序委托,无论用户是否在聊天屏幕上。我如何检查?这是我正在测试的代码,但它不起作用,
if let chatViewController = storyboard.instantiateViewController(withIdentifier: "ChatDetailViewController") as? ChatDetailViewController, let tabBar = storyboard.instantiateViewController(withIdentifier: "TabBar") as? UITabBarController {
let navigationController = UINavigationController(rootViewController: chatViewController)
tabBar.hidesBottomBarWhenPushed = true
tabBar.viewControllers = [navigationController]
if tabBar.viewControllers == [navigationController]
{
completionHandler([])
}
else
{
completionHandler([.alert,.sound])
}
}
解决方案
您实际上是在创建ChatViewController
. 相反,您需要获取当前打开的 ViewController 实例并检查它是否为ChatViewController
.
这可能是一个解决方案。我想UITabBarController
是您的应用程序的根视图控制器。
if let tabBar = window?.rootViewController as? UITabBarController {
if let chatViewController = tabBar.selectedViewController as? ChatDetailViewController {
completionHandler([])
print("Chat VC is on top")
}
else {
completionHandler([.alert,.sound])
print("Chat VC is not on top")
}
}
如果标签栏控制器拥有一个导航控制器(可能应该),那么下面的代码应该可以工作。
if let tabBar = window?.rootViewController as? UITabBarController {
if let navVC = tabBar.selectedViewController as? UINavigationController, let chatViewController = navVC.viewControllers.last as? ChatDetailViewController {
completionHandler([])
print("Chat VC is on top")
}
else {
completionHandler([.alert,.sound])
print("Chat VC is not on top")
}
}
推荐阅读
- android - 我希望 Camera.main 跟随播放器,它在编辑器中运行良好,但在 Android Deice 上却不行
- flutter - 使用不包含 MediaQuery 的上下文调用 MediaQuery.of()。(紧急援助)
- sql - 使用带有组合框的 Vb.net 显示数据库中的数据
- web-services - Web 框架会在读取正文之前检查授权标头吗?
- tailwind-css - 将鼠标悬停在 Tailwindcss 中时如何增加文本输入宽度(带过渡)
- python - 如何在不刷新烧瓶项目页面的情况下更新值
- ios - 错误:属性声明中应有“var”关键字
- linux - 为什么nop操作会导致sigint?
- javascript - 使用particles.js 插件更改背景滑块旋转
- jekyll - 如何在 Jekyll 中显示前 N 个帖子