我在Xcode 5中使用情节提要,如下所示:

我的要求是从应用程序委托将ViewController(VIEW1或VIEW2)推入视图。从本质上讲,屏幕上当前显示的视图无关紧要-我只想在应用程序委托拾取外部事件时使ViewController出现。

为了尝试实现此目的,我在我的应用程序委托中同时具有对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的应用程序委托方法是:
-(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的堆栈中,但是没有显示。

(关于应用程序委托的rootViewController的设置,我在VC-Splash和VC-Setup ViewCtrls完成后将其设置为_tabBarProducts)。

如果有人可以给我一个实现目标的想法,我将不胜感激。我怀疑我的问题源于TabBarCtrl中的NavCtrl,但我不知道解决方法。

最佳答案

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

您可以尝试像这样设置tabBarController的选定索引:

[self.tabBarController setSelectedIndex:1];

关于ios - 从应用程序代理推送ViewController,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/25902143/

10-14 21:04
查看更多