我遵循了这个UITabBarController Tutorial,它创建了一个Tab Bar,其中的子视图主要使用Interface Builder。在那里创建了UITabBarController,并且还添加了Tab的视图控制器。
我是否正确创建UIViewControllers {WelcomeViewController | AboutViewController}。{h | m}是不必要的?
Subviews {WelcomeViewController | AboutViewController} .xib的真实文件所有者是谁?
请注意,我最初尝试在WelcomeViewController.h中创建一个IBAction方法:在WelcomeViewController.xib的Interface Builder中,我可以按下按钮按下它在File的所有者处出现的那个动作。但是在运行时它崩溃了,因为真正的文件所有者可能是而不是 WelcomeViewController.m的对象。我在这儿吗?这是IBAction出现在Interface Builder中的错误(这里是Xcode 4)吗?
最后一个问题:当我在Interface Builder中连接所有内容时,如何/仍然可以将代码分开(在WelcomeViewController.h中有IBActions用于仅在此子视图上发生的操作)?
答案 0 :(得分:3)
我是否正确创建UIViewControllers {WelcomeViewController | AboutViewController}。{h | m}是不必要的?
不,两个控制器都是必需的,因为每个全屏窗口至少应该(并且最佳地,最多)一个ViewController来管理您的视图层次结构。 TabBarController只是一种“哑”的元控制器,负责管理它加载的子控制器的显示 - 因此你需要控制器来切换视图。我建议你阅读this part of the Apple doc。
谁是Subviews {WelcomeViewController | AboutViewController} .xib的真实文件所有者?
文件的所有者应该是相应的控制器类(在您的情况下,{WelcomeViewController | AboutViewController}。{h | m}) - 您可以在选择文件所有者时在检查器选项板中的Interface Builder中设置类。只有在应用程序启动时打开的第一个窗口(通常称为Main.xib左右)才能将应用程序委托作为文件所有者。文件的所有者拥有XIB / NIB文件的对象 - 对象引用明智,你知道我的意思:)我认为也应该可以加载XIB / NIB文件与其他控制器(而另一个控制器自动成为文件的所有者),但我不确定。
......我在这儿吗?这是IBAction出现在Interface Builder中的错误(这里是Xcode 4)吗?
可能是您在Interface Builder中以错误的方式连接了操作,这是一个常见的错误。尝试按住Ctrl键,然后从按钮拖动一行到文件的所有者,并选择要链接到的所需方法。应该这样做。
最后一个问题:当我在Interface Builder中连接所有内容时,如何/仍然可以将代码分开(在WelcomeViewController.h中有IBActions用于仅在此子视图上发生的操作)?
我想我在第一段回答了这个问题 - WelcomeViewController仍然存在,您所要做的就是创建IBOutlets并在IB中连接它们。当然,您也可以通过编程方式进行连接,因为会员“视图”会自动填充(通过文件所有者连接),并且可以从那里访问所有子视图。