我在Xcode 5中使用了一个故事板,如下所示:
我的要求是将ViewController(VIEW1或VIEW2)从app delegate推入视图。基本上,屏幕上的视图目前无关紧要 - 我只想在应用代理接收外部事件时显示ViewController。
为了尝试实现这一点,我在我的app委托中有对TabBarCtrl-Products和NavCtrl-ProductA的属性引用。
- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions
{
_tabBarProducts = [[UIStoryboard storyboardWithName:@"Main" bundle:nil] instantiateViewControllerWithIdentifier:@"sidTabBarProducts"];
NSArray *tabvcs = _tabBarProducts.viewControllers;
for (id controller in tabvcs){
if ([controller isKindOfClass:[VCNavControl_ProductA class]]) {
_navControllerProductA = controller;
break;
}
}
return YES;
}
推送VIEW2的app委托方法是:
-(void)showVCVIEW2
{
VC_V2 *targetvc = nil;
targetvc = [[UIStoryboard storyboardWithName:@"Main" bundle:nil] instantiateViewControllerWithIdentifier:@"sidView2"];
[[AppDelegate sharedInstance].navControllerProductA pushViewController:targetvc animated:NO];
}
当调用showVCVIEW2时显示VIEW1时,这可以正常工作,但是当ViewCtrl-ProductB显示时它不起作用。我可以看到targetvc的新实例已添加到AppDelegate _navControllerProductA的堆栈中,但它不会显示。
(关于app委托的rootViewController的设置,我在VC-Splash和VC-Setup ViewCtrls完成后将其设置为_tabBarProducts。)
如果有人能告诉我如何实现这一点,我将非常感激。我怀疑我的问题源于TabBarCtrl中的NavCtrl,但我不知道如何解决这个问题。
答案 0 :(得分:1)
您的问题是您正在推送的导航控制器不在视图层次结构中。
您可以尝试设置tabBarController
所选的索引,如下所示:
[self.tabBarController setSelectedIndex:1];