【问题标题】:Pushing a view when the rootViewController is not a UINavigationController当 rootViewController 不是 UINavigationController 时推送视图
【发布时间】:2013-04-18 18:06:41
【问题描述】:

好的,所以我一直在寻找以下问题的答案:当来自 AppDelegate 的推送通知到达时,如何将某个视图控制器推送到视图中?

大多数答案是,如果 rootViewController 是 UINavigationController,我必须通过我的 StoryBoard 实例化一个视图并使用该根导航控制器推送它。

这是我的情况。这是我的故事板的组织方式:

如您所见,我的 rootViewController 没有 UINavigationController。那么,我该如何将某个视图从我的故事板中推出呢?

注意:为推送通知提供一些单独的模式视图并不是一个好主意。这是我最后的手段。

我想要 Apple Mail 和 Message 应用程序中的解决方案。

【问题讨论】:

  • 你可以添加嵌入你的rootViewController到navigationController并保持navigationBar隐藏?
  • 这是一个开始,但是我如何从 StoryBoard 推送另一个视图?还是只能创建和展示新的?
  • 您想从哪个控制器显示(推送)这个新的视图控制器(是否希望能够在通知到来时从屏幕上的任何控制器推送它)?这个新控制器的目的是什么?根据它的用途,模态演示可能更合适。
  • @rdelmar 是的,我想将现有的视图控制器(来自我的故事板)推送到当时显示的任何控制器上。我的意思是这对我来说是完美的解决方案。那可能吗?正如我所说,以模态方式显示视图是我最后的手段
  • @SergeyCatraniuc,为什么将它作为最后的手段提出来?如果您希望能够从任何控制器呈现它,我不确定您是否有任何选择。由于来自推送通知的信息会中断应用程序逻辑流程,因此模态演示似乎最合适——这就是它们的用途。

标签: ios storyboard apple-push-notifications appdelegate


【解决方案1】:

好吧,我想我不会那么轻易放弃 :) 这是我找到的解决问题的方法。由于我是在模态视图控制器中展示我的主要应用程序视图,所以我做了以下操作:

从 iOS 5 开始,每个视图控制器都有一个 presentedViewController 属性。一旦你知道了,从那里开始就很容易了。 这是 AppDelegate.m 中的一些特定代码

- (void) application:(UIApplication *)application didReceiveRemoteNotification:(NSDictionary *)userInfo {  
   if ([[userInfo objectForKey:@"notificationType"] isEqualToString: @"messageType"])   {

   UITabBarController * tabBarController = (UITabBarController *)[self.window.rootViewController presentedViewController];
[tabBarController setSelectedIndex:kChatViewIndex]; 
// My view controller that I presented modally is a tabBar, your case can be different. 

// ... so from here I can reach any navigation controller or any other view from inside my app

}

现在既然你已经有了你的视图控制器,你可以使用 setSelectedIndex: 如果它是一个 tabBarController,或者如果它是一个导航单元,则推送某个视图控制器。

希望这对遇到类似问题的人有所帮助。 干杯!

【讨论】:

    猜你喜欢
    • 2012-09-15
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-07-29
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多