推送通知在TabBarController中打开特定屏幕NavigationController revealViewController

时间:2016-05-04 03:57:22

标签: ios swift apple-push-notifications appdelegate

这是我想要做的。 当我收到推送通知并点击时,我想在我的应用中显示特定的屏幕。我发现了很多关于它的事情,但由于应用程序结构的复杂性,我遇到了麻烦。 以下是应用程序的结构:

我想将一些参数传递给DetailViewContorller,这样我就可以确保在打开屏幕时获得正确的结果。 这是我的应用程序结构的屏幕截图 application Folow

在我的AppDelegate中使用以下代码:

let storyboard = UIStoryboard(name: "Main", bundle: nil)
let tb = storyboard.instantiateViewControllerWithIdentifier("TabBarVC") as! UITabBarController 
tb.selectedIndex = 1
window?.rootViewController? = tb

我在点击通知时设法进入标签栏,但我对结果不满意。我仍然有以下问题:

  1. revealViewController为零,因此我无法打开设置面板
  2. 我仍然没有访问位于视图层次结构底部的DetailViewController
  3. 任何提示都将受到赞赏。

2 个答案:

答案 0 :(得分:0)

虽然我的流程有点不同,但我遇到了类似的问题。我最终处理了Push Notification事件(当用户点击它时)并将对象存储在app delegate级别。在之后出现的每个视图控制器中(在ViewDidLoad()方法中)我将检查该对象并确定是否将流重定向到下一个视图控制器。为了解决这个问题,我的通知有一个与之关联的类型。不幸的是,我无法找到更好的解决方案。

P.S。看起来你似乎在代码中实例化View Controllers,而我正在使用Storyboard。但是,基本思路是一样的。我结束了

答案 1 :(得分:0)

@MK_Dev,感谢您的建议,但我一直在寻找更易于管理的内容。

这实际上对我有所帮助。 Get top most UIViewController

这是我做的:

if var topControl = UIApplication.sharedApplication().keyWindow?.rootViewController {
            while let presentedContreller = topControl.presentedViewController{
                topControl = presentedContreller
            }
            if topControl.childViewControllers[0].isKindOfClass(MyCustomClassVC) {
            // Check if the user is already on the VC we are trying to open
                let chatController = topControl.childViewControllers[0] as! MyCustomClassVC 
// ... any additional code you need to add here ...
    }
}