下面这两个陈述有什么区别?

时间:2011-10-14 09:10:14

标签: objective-c ios cocoa-touch

self.window.rootViewController = self.tabBarController;
 [self.window addSubview:self.tabBarController.view];

它们用于以下语境:

- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions
{
    // Override point for customization after application launch.
    // Add the tab bar controller's current view as a subview of the window


    //   self.window.rootViewController = self.tabBarController;
     [self.window addSubview:self.tabBarController.view];

    IntroViewController *introViewController = [[IntroViewController alloc] initWithNibName:@"IntroViewController" bundle:nil];

    //Lets place introViewController in navController
    UINavigationController * navController = [[UINavigationController alloc] initWithRootViewController:introViewController];

    //Now lets display it 
    [self.tabBarController presentModalViewController:navController animated:YES];

    [navController release];
    [introViewController release];


    [self.window makeKeyAndVisible];
    return YES;
}

2 个答案:

答案 0 :(得分:0)

来自iOS Reference

<强> RootViewController的

  

根视图控制器提供窗口的内容视图。   将视图控制器分配给此属性(以编程方式   或者使用Interface Builder)将视图控制器的视图安装为   窗口的内容视图。如果窗口具有现有视图   层次结构,旧视图在新视图之前被删除   安装。

<强> addSubview

  

此方法保留视图并将其下一个响应者设置为接收者,   这是它的新超级视图。

     

视图只能有一个超级视图。如果视图已经有超视图和   该视图不是接收者,此方法删除了以前的   在使接收器成为新的超级视图之前的超视图。

所以我们可以说主要区别在于设置rootViewController会破坏UIWindow中包含的所有先前视图,并使用addSubView:只在顶部添加UIView

答案 1 :(得分:0)

self.window.rootViewController = self.tabBarController;

此语句错误,因为window是一个容器,你没有任何根控制器。

子视图: [self.window addSubview:self.tabBarController.view];

Here you are adding the tabBarController as a subview which will add your windows container. And this is the right way to create the tab bar controller.