Objective c 使用视图层次结构设置应用程序代理中的根视图

Objective c 使用视图层次结构设置应用程序代理中的根视图,objective-c,uiviewcontroller,Objective C,Uiviewcontroller,我希望能够在应用程序委托中手动设置根视图控制器,使其视图层次结构保持完整 我的视图控制器层次结构是 塔巴控制器 导航控制器 FirstViewController DetailedViewController我要显示此视图 目前我做的是 DetailedViewController *vc = (DetailedViewController *)[mainStoryBoard instantiateViewControllerWithIdentifier:@"DetailedViewCont

我希望能够在应用程序委托中手动设置根视图控制器,使其视图层次结构保持完整

我的视图控制器层次结构是

塔巴控制器 导航控制器 FirstViewController DetailedViewController我要显示此视图 目前我做的是

  DetailedViewController *vc = (DetailedViewController *)[mainStoryBoard instantiateViewControllerWithIdentifier:@"DetailedViewController"];
    [self.window setRootViewController:vc];
    [vc performSelector:@selector(setup:) withObject:section];
这显然忽略了层次结构,因此当应用程序加载时,我没有导航栏和选项卡栏

所以我试过这个

    UITabBarController *tabBarController = [mainStoryBoard instantiateViewControllerWithIdentifier:@"tabController"];
    tabBarController.selectedIndex = 0;

    DetailedViewController *vc = (DetailedViewController *)[mainStoryBoard instantiateViewControllerWithIdentifier:@"DetailedViewController"];

    UINavigationController *navController = [mainStoryBoard instantiateViewControllerWithIdentifier:@"NavController"];
    [navController pushViewController:vc animated:YES];

    [self.window setRootViewController:tabBarController];

但是使用这段代码,我可以查看FirstViewController,而不是DetailedViewController,您的视图权限如下 您有一个选项卡栏,其中navcontroller的根视图为firstviewcontroller,因此此代码将firstview添加为根视图

 UITabBarController *tabBarController = [mainStoryBoard instantiateViewControllerWithIdentifier:@"tabController"];
    tabBarController.selectedIndex = 0;

FrstViewController *firstView = (FirstViewController*)[mainStoryboard instantiateViewControllerWithIdentifier:@"FirstViewController"];

    UINavigationController *navController = [UINavigationViewController alloc] initWithRootViewController:firstview]
    self.tabbarController.viewControllers = [NSArray arrayWithObjects:navController,nil]

    [self.window setRootViewController:tabBarController];
当我们第一次在viewDidload中加载它时,按detailviewcontroller

-(void) viewDidLoad
{
DetailedViewController *vc = (DetailedViewController *)[mainStoryBoard instantiateViewControllerWithIdentifier:@"DetailedViewController"];
[self.navigationController pushViewController vc];
}

为什么不在使用所有层次结构的同时,将细节视图控制器指定为故事板中的根?你的意思是没有层次结构的东西吗?这是因为如果没有导航栏和选项卡栏,用户将无法在应用程序中导航我知道,那么为什么要将详细信息控制器设置为根用户?我不想将详细信息视图设置为根用户,我试图做的是当用户点击通知时,应用程序打开时会显示细节视图,其中包含与点击通知相关的数据。如果您希望在通知时保持层次结构,则必须手动设置以从第一个控制器IMO推送细节控制器。