避免在收到推送通知 ios 时加载主视图控制器

Posted

技术标签:

【中文标题】避免在收到推送通知 ios 时加载主视图控制器【英文标题】:Avoid loading main viewcontroller on receive of push notification ios 【发布时间】:2015-10-21 05:40:32 【问题描述】:

我在收到推送通知时使用下面的代码来显示我的viewcontroller。它工作正常,但它首先加载主viewcontroller,然后通知viewcontroller。因此,每次用户收到通知时,他们都会看到两个 viewcontrollers 首先加载主文件,然后是通知 controller

我怎样才能避免这种情况?从 UI 的角度来看,加载两个视图控制器看起来并不好。

UIViewController *main=[[UIStoryboard storyboardWithName:@"Main" bundle:nil]  instantiateViewControllerWithIdentifier:@"main"];            
UINavigationController *navigationController=[[UINavigationController alloc] initWithRootViewController:main];
self.window.rootViewController =nil;
UIViewController *destCon = [[UIStoryboard storyboardWithName:@"Main" bundle:nil] instantiateViewControllerWithIdentifier:@"RelNoti"];
UINavigationController *desNevCont = [[UINavigationController alloc] initWithRootViewController:destCon];                       
self.window.rootViewController = navigationController;
[self.window makeKeyAndVisible];
[self.window.rootViewController  presentViewController:desNevCont animated:YES completion:nil];

【问题讨论】:

【参考方案1】:

您可以在检测到推送通知时像下面这样简单地更改应用的 rootViewController 并避免视图之间的转换:

UIViewController *destCon = [[UIStoryboard storyboardWithName:@"Main" bundle:nil] instantiateViewControllerWithIdentifier:@"RelNoti"];
UINavigationController *desNevCont = [[UINavigationController alloc] initWithRootViewController:destCon];


self.window.rootViewController = desNevCont;
[self.window makeKeyAndVisible];

从您下面的代码中,您似乎将mainViewController 分配为您的rootViewController,然后在其上方显示notificationViewController,这就是创建两个视图的转换的原因。因此,只需使用上述代码限制您的代码即可。

self.window.rootViewController = navigationController; // You are doing it here
[self.window makeKeyAndVisible];
[self.window.rootViewController  presentViewController:desNevCont animated:YES completion:nil]; // presenting here

【讨论】:

【参考方案2】:

在这一行设置动画为NO,

[self.window.rootViewController  presentViewController:desNevCont animated:NO completion:nil];

【讨论】:

@RichieRich 没问题 :)。我建议使用 Rumin 的答案,因为它会更有效。

以上是关于避免在收到推送通知 ios 时加载主视图控制器的主要内容,如果未能解决你的问题,请参考以下文章

Xamarin/Mvvmcross:收到 iOS 推送通知时打开不同的视图控制器

iOS - 收到推送通知后显示视图

当用户使用 iOS 13 Swift 5 点击推送通知时,在特定视图中打开应用程序

收到多个推送通知时应用程序冻结

iOS - 在收到推送通知事件时更改视图的内容

在推送通知 Swift 2 AppDelegate 上加载特定的 viewController