【问题标题】:Push ViewController on AppDelegate from TabBar Application从 TabBar 应用程序在 AppDelegate 上推送 ViewController
【发布时间】:2013-01-24 19:58:49
【问题描述】:

我有一个显示多个选项卡的选项卡栏应用程序。在通知的情况下,我希望将用户定向到能够推送“返回”的视图控制器。 当我的应用只是导航控制器应用时,我在 AppDelegate 中使用了这段代码:

UIStoryboard *mainStoryboard = self.window.rootViewController.storyboard;
DetailViewController *detailViewController = (DetailViewController*)[mainStoryboard instantiateViewControllerWithIdentifier: @"detailViewController"];
[(UINavigationController*)self.window.rootViewController pushViewController:detailViewController animated:NO];

在我将我的应用程序转换为标签栏之前,这段代码可以正常工作。似乎“self.window.rootViewController”不再属于“UINavigationController”类型,因此调用“pushViewController”会生成一个异常,说方法不存在。 有什么方法可以在 Tab Bar 应用程序上进行这项工作?

谢谢

【问题讨论】:

  • 你想让这个新的视图控制器覆盖标签栏吗?你想让后退按钮做什么?
  • 是的。这是一个新闻应用程序。如果用户滑动通知,我想打开一个直接显示新闻项目的视图控制器。然后按回我希望他返回到常规选项卡视图。

标签: objective-c uinavigationcontroller uitabbarcontroller storyboard pushviewcontroller


【解决方案1】:

您应该将通知控制器显示为模态 (presentViewController:animated:completion:),并在该控制器内提供关闭它的方法,可能是顶部栏上的按钮。

编辑: 感谢 Dimitry 的回答,我能够走上正确的道路。为了保留顶部导航栏和底部工具栏,我只需要做一个小技巧。我通过使用“UINavigationController”实例来做到这一点。代码如下:

UIStoryboard *mainStoryboard = self.window.rootViewController.storyboard;
DetailViewController *detailViewController = (DetailViewController*)[mainStoryboard instantiateViewControllerWithIdentifier: @"detailViewController"];
UINavigationController *navigationController = [[UINavigationController alloc] initWithRootViewController:detailViewController];
navigationController.navigationBar.tintColor = [UIColor blackColor];
navigationController.toolbar.tintColor = [UIColor blackColor];
[self.window.rootViewController presentViewController:navigationController animated:YES completion:NULL];

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-08-01
    • 2018-04-18
    • 2014-02-15
    • 1970-01-01
    • 2014-11-12
    相关资源
    最近更新 更多