Ios loadNibNamed:method在AppDelegate中做什么?
我知道这两行代码定义了我的应用程序的根视图, 但我不知道这两条线是如何实现的 有人能分别解释这两行代码吗?特别是第一行,我不知道它在我们的视图机制中实际在做什么Ios loadNibNamed:method在AppDelegate中做什么?,ios,Ios,我知道这两行代码定义了我的应用程序的根视图, 但我不知道这两条线是如何实现的 有人能分别解释这两行代码吗?特别是第一行,我不知道它在我们的视图机制中实际在做什么 感谢您在加载您作为所有者传递的selfxib时,因此您在xib中与文件所有者建立的任何连接都将在应用程序代理上设置属性。在名为TabBarController的xib中,您很可能有一个UITabBarController连接到文件所有者上的rootController 因此,一旦xib加载并建立了所有连接,您就可以通过-[AppDele
感谢您在加载您作为
所有者传递的self
xib时,因此您在xib中与文件所有者
建立的任何连接都将在应用程序代理上设置属性。在名为TabBarController
的xib中,您很可能有一个UITabBarController
连接到文件所有者上的rootController
因此,一旦xib加载并建立了所有连接,您就可以通过-[AppDelegate rootController]
引用tabBarController
。接下来,从rootController
中抓取视图,并将其粘贴到视图层次结构中
此代码需要更新。由于iOS 4UIWindow
希望在此方法结束时设置rootViewController
,因此您应该在日志输出中看到有关此效果的警告 首先。这两行都错了。
他们做什么?
告诉主捆绑包打开.nib文件(compiled.xib),构建其中描述的对象,并将文件所有者连接到self
错误:这应由UIViewController
负责,并使用初始值设定项initWithNibName:bundle:
自动执行
将视图控制器的视图添加到单个窗口错误:您应该将视图控制器指定为窗口的rootViewController
怎么做?
创建UIViewController
的子类,可能名为MYTabBarController
创建名为MYTabBarController.XIB的XIB文件(与类相同),其中文件所有者为MYTabBarController
在应用程序中,委托初始化此视图控制器:
[[NSBundle mainBundle] loadNibNamed:@"TabBarController" owner:self options:nil];
[self.window addSubview:rootController.view];
将视图控制器指定给窗口。这一行在内部加载XIB并添加子视图,就像您试图做的那样
MYTabBarController *rootController = [[MYTabBarController alloc] init];
// In case your XIB has different name: -initWithNibName:@"xib name" bundle:nil
还有其他选择吗?
如果您不需要为UIViewController
子类化,您可以:
创建一个XIB,其中文件所有者是UIApplication
本身。文件名并不重要
在这里,您可以创建窗口,根视图控制器(例如UITabBarController
)和一些您想要的嵌套视图控制器
在Info.plist中的键“Main nib file base name”或NSMainNibFile
下指定此XIB。它将在调用应用程序:didFinishLaunchingWithOptions:
之前加载
AppDelegate负责设置初始UI屏幕。上面的几行基本上就是这样做的。像这样从xib加载并不可怕。根据代码判断,这可能是一些非常早期的iOS模板代码。另外,故事板现在基本上就是这样工作的,例如,它们加载ViewController,这使您在使用它们时远离alloc/init
。@Paul.s当然不可怕,它可以作为一种高级技术从多个XIB加载VC。但是,如果有人正在学习iOS开发,应该明确指出,这不是正确的方法。对于故事板,您也从不手动加载笔尖。
window.rootViewController = rootController;