这是我想要做的。 当我收到推送通知并点击时,我想在我的应用中显示特定的屏幕。我发现了很多关于它的事情,但由于应用程序结构的复杂性,我遇到了麻烦。 以下是应用程序的结构:
LoginViewController
RevealViewController
(https://github.com/John-Lluch/SWRevealViewController)UITabbarController
NavigationController
ViewController
(这是一个表视图)DetailViewContorller
我想将一些参数传递给DetailViewContorller
,这样我就可以确保在打开屏幕时获得正确的结果。
这是我的应用程序结构的屏幕截图
application Folow
在我的AppDelegate中使用以下代码:
let storyboard = UIStoryboard(name: "Main", bundle: nil)
let tb = storyboard.instantiateViewControllerWithIdentifier("TabBarVC") as! UITabBarController
tb.selectedIndex = 1
window?.rootViewController? = tb
我在点击通知时设法进入标签栏,但我对结果不满意。我仍然有以下问题:
revealViewController
为零,因此我无法打开设置面板DetailViewController
任何提示都将受到赞赏。
答案 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 ...
}
}