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

Posted

技术标签:

【中文标题】iOS 以编程方式更改 AppDelegate 中的视图【英文标题】:iOS Programmatically changing views within AppDelegate 【发布时间】:2013-05-24 06:56:12 【问题描述】:

当特定的推送通知通过时,我正在尝试更改视图,但我取得了小小的成功。 (使用 parse 和推送通知,适应 App 的打开和关闭时间)。

我的 Storyboard 看起来像这样,我正在尝试将 AppDelegate 中的视图更改为 DetailViewController。

现在我可以通过更改根控制器来更改视图,但我只能附加我的选项卡视图或导航,不能同时附加两者。

 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】:

我已经解决了您的问题。创建了一些场景,不确定它是否适用于您的情况。还是试试吧

我的故事板

我做了什么

 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];

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

【讨论】:

看准了!谢谢你,不胜感激。

以上是关于iOS 以编程方式更改 AppDelegate 中的视图的主要内容,如果未能解决你的问题,请参考以下文章

为啥我无法在 AppDelegate 中以编程方式更改我的初始视图控制器?

以编程方式更改 UINavigationbar 背景颜色和标题字体/颜色

如何在 iOS 上以编程方式创建选项卡视图

iOS:以编程方式更改选项卡 - 故事板

在 AppDelegate 中以编程方式设置 App 入口点

以编程方式更改 iOS 锁屏