iOS以编程方式更改AppDelegate中的视图

时间:2013-05-24 06:56:13

标签: ios uinavigationcontroller uitabbarcontroller appdelegate

我试图在特定推送通知发生时更改视图,我取得了一些小小的成功。 (使用推送通知解析,适用于应用程序打开和关闭的时间)。

我的故事板看起来像这样,我正在尝试将AppDelegate中的视图更改为DetailViewController。 enter image description here

现在我可以通过更改根控制器来更改视图,但我只能连接我的标签视图或导航而不是两者。

 UIStoryboard *mainStoryboard = [UIStoryboard storyboardWithName:@"MainStoryboard_iPhone" bundle:nil];
    DetailViewController *detail = (DetailViewController *)[mainStoryboard instantiateViewControllerWithIdentifier:@"detail"];
    [detail setDetailItem:StreamData[2]];

    self.window.rootViewController = detail;

当然,(下面)的使用仅适用于其他控制器。

[self.navigationController pushViewController:detail animated:YES];

我想知道在维护底部的标签栏和顶部的导航栏时是否可以通过AppDelegate实现这一点?

我最初的工作是将AppDelegate的触发器设置为可从所有控制器访问的全局变量,然后使用viewDidAppear之类的东西来检查它们是否需要更改。这看起来太资源密集,但它维护我的布局。

我的问题与此类似:pushing view controller inside a tab bar from app delegate, after a notification

1 个答案:

答案 0 :(得分:5)

我已经解决了你的问题。创建了一些场景,不确定它会在你的情况下起作用。无论如何试一试

我的故事板

enter image description here

我做了什么

 UIStoryboard *mainStoryboard = [UIStoryboard storyboardWithName:@"MainStoryboard" bundle:nil];

[(UITabBarController *)self.window.rootViewController setSelectedIndex:1];
UINavigationController *nav = [[(UITabBarController *)self.window.rootViewController viewControllers]objectAtIndex:1];
UIViewController *detail = [mainStoryboard instantiateViewControllerWithIdentifier:@"detail"];
[nav pushViewController:detail animated:NO];

这为我提供了详细视图控制器,其中一个按钮作为带有标签栏和导航控制器的第一个视图