代码之家  ›  专栏  ›  技术社区  ›  ryanprayogo

如何将两个ViewControllers添加到同一窗口

  •  1
  • ryanprayogo  · 技术社区  · 14 年前

    我要做的基本上是创建这个视图作为应用程序启动时的第一个“屏幕”:

    http://cl.ly/1USw/content

    这是我在app delegate中的代码:

    - (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions {    
    
        // PersonListViewController is the 'content' of the screen (image, name, and button)
     PersonListViewController* personList = [[PersonListViewController alloc] initWithNibName:@"PersonListViewController" bundle:[NSBundle mainBundle]];
     navController = [[UINavigationController alloc] initWithRootViewController:personList];
     [personList release];
    
     UITabBarController* tabBarController = [[UITabBarController alloc] init];
     [window addSubview:[tabBarController view]];
     [window addSubview:[navController view]];
        [window makeKeyAndVisible];
    
     return YES;
    }
    

    有人能向我解释一下我做错了什么以及如何改正吗?

    2 回复  |  直到 14 年前
        1
  •  3
  •   jbrennan    14 年前

    您通常会嵌套主ViewController(在本例中, PersonListViewController UINavigationController tabBarController.viewControllers 属性等于视图控制器数组(每个选项卡一个)。

    对你来说

    tabBarController.viewControllers = [NSArray arrayWithObject:navController];
    

    然后只将tabBarController的视图添加到窗口中

    [window addSubview:[tabBarController view];
    

        2
  •  2
  •   rgeorge    12 年前

    如果您尝试将来自两个视图控制器的视图放入UIWindow中,UIWindow将无法很好地处理:只有最后一个视图控制器将获得适当的回调,而且它们彼此不了解(当我想要在一组透明的视图后面有一个恒定的动画背景时,我是故意这么做的,但这很棘手。)在ios4中,这是更明确的:UIWindow增加了一个“rootViewController”属性 这个

    包含 导航控制器,每个选项卡一个,每个包含一个自定义VCs。

    PersonListViewController* plvc = [[[PersonListViewController alloc]
                                        initWithNibName:@"PersonListViewController"
                                                 bundle:nil]
                                        autorelease];
    
    UINavigationController *uinc = [[[UINavigationController alloc]
                                      initWithRootViewController:plvc]
                                      autorelease];
    // ... make more VCs for any other tab pages here
    
    UITabBarController* tbc = [[[UITabBarController alloc] init] autorelease];
    
    [tbc setViewControllers:[NSArray arrayWithObjects: uinc, nil]]; // *1
    
    /* iOS 4 and later, preferred: */
    [window setRootViewController:tbc];
    
    /* or, alternatively, in iOS 3:
    [window addSubview:[tbc view]];
    [self setMyMainTabsController:tbc]; // must keep an owning reference or it'll get released
    */
    
    [window makeKeyAndVisible];
    

    在*1处,将其他选项卡的所有VCs添加到列表中。