从app delegate推送ViewController

时间:2014-09-17 23:54:08

标签: ios objective-c xcode uiviewcontroller

我在Xcode 5中使用了一个故事板,如下所示:

storyboard screenshot

我的要求是将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,但我不知道如何解决这个问题。

1 个答案:

答案 0 :(得分:1)

您的问题是您正在推送的导航控制器不在视图层次结构中。

您可以尝试设置tabBarController所选的索引,如下所示:

[self.tabBarController setSelectedIndex:1];