[[NSBundle mainBundle] loadNibNamed:@"TabBarController" owner:self options:nil];
[self.window addSubview:rootController.view];
我知道这两行代码定义了我的App的根视图, 但我不知道这两条线如何实现它。
有人能分别解释这两行代码吗?特别是第一行,我不知道它在我们的视图机制中实际做了什么
谢谢
答案 0 :(得分:0)
加载xib时,您将self
作为owner
传递,因此您在xib中为File's Owner
创建的任何连接都将在应用委托上设置属性。在名为TabBarController
的xib中,您很可能会UITabBarController
与rootController
File's Owner
相关联。
因此,一旦xib加载并完成了所有连接,您将通过tabBarController
引用-[AppDelegate rootController]
。接下来,您从rootController
抓取视图并将其粘贴在视图层次结构中。
此代码需要更新。由于iOS 4 UIWindow
期望在此方法结束时设置rootViewController
,因此您应该在日志输出中看到此效果的警告。
答案 1 :(得分:-1)
首先。这两行都是错误的。
告诉主捆绑打开.nib文件(编译.xib),构建其中描述的对象并将文件所有者连接连接到self
。 错误:这应由UIViewController
负责,并使用初始化程序initWithNibName:bundle:
自动。
将视图控制器的视图添加到单个窗口。 错误:您应该将视图控制器指定为窗口rootViewController
。
创建UIViewController
的子类,可能名为MYTabBarController
。
创建名为 MYTabBarController.xib 的XIB文件(与类相同),文件所有者为MYTabBarController
。
在 App Delegate 中初始化此视图控制器:
MYTabBarController *rootController = [[MYTabBarController alloc] init];
// In case your XIB has different name: -initWithNibName:@"xib name" bundle:nil
将视图控制器分配给窗口。这条单行内部加载XIB并添加子视图,就像你试图做的那样。
window.rootViewController = rootController;
如果您不需要继承UIViewController
,您可以:
创建一个XIB,其中文件所有者是UIApplication
本身。文件名并不重要。
在此您可以根据需要创建窗口,根视图控制器(例如UITabBarController
)和一些嵌套视图控制器。
在Info.plist中的“主nib文件基本名称”或NSMainNibFile
下指定此XIB。它将在调用application:didFinishLaunchingWithOptions:
之前加载。