3

我遵循了这个UITabBarController 教程,它创建了一个带有相应子视图的标签栏,主要使用 Interface Builder。UITabBarController 在那里创建,并且选项卡的视图控制器也在那里添加。

我是否正确创建 UIViewControllers {WelcomeViewController|AboutViewController}.{h|m} 是不必要的?

谁是子视图 {WelcomeViewController|AboutViewController}.xib的真正文件所有者?

请注意,我最初尝试在 WelcomeViewController.h 中创建 IBAction 方法:在 WelcomeViewController.xib 的 Interface Builder 中,我可以将按钮按下连接到该操作,因为它出现在 File's Owner 中。但是在运行时它崩溃了,因为真正的文件所有者可能不是WelcomeViewController.m 的对象。我在这里吗?IBAction 出现在 Interface Builder(此处为 Xcode 4)中是否是一个错误?

最后一个问题:当我像教程中那样在 Interface Builder 中连接所有内容时,如何/我仍然可以分离代码(在 WelcomeViewController.h 中有 IBActions 用于仅在此子视图上发生的操作)?

4

1 回答 1

3

我是否正确创建 UIViewControllers {WelcomeViewController|AboutViewController}.{h|m} 是不必要的?

不,两个控制器都是必需的,因为每个全屏窗口应该至少(并且最好最多)一个 ViewController 来管理您的视图层次结构。TabBarController 只是一种“愚蠢”的元控制器,用于管理它加载的子控制器的显示 - 因此您需要用于切换视图的控制器。我建议您阅读Apple 文档的这一部分

谁是子视图 {WelcomeViewController|AboutViewController}.xib 的真正文件所有者?

文件的所有者应该是相应的控制器类(在您的情况下,{welcomeviewcontroller | {h | m}) - 您可以在选择文件的所有者时在Inspector调色板中设置Class中的Class。只有在应用程序启动时打开的第一个窗口(通常称为 Main.xib 左右)应该将应用程序委托作为文件的所有者。文件的所有者拥有 XIB/NIB 文件的对象 - 对象引用明智,你知道我的意思 :) 我认为也应该可以使用其他控制器加载 XIB/NIB 文件(并且另一个控制器自动成为文件的所有者),但我不确定。

……我在这里吗?IBAction 出现在 Interface Builder(此处为 Xcode 4)中是否是一个错误?

可能是您在 Interface Builder 中以错误的方式连接操作,这是一个常见错误。尝试按住 Ctrl 键,然后从按钮拖一条线到 File's Owner 上,然后选择要链接到的所需方法。那应该这样做。

最后一个问题:当我像教程中那样在 Interface Builder 中连接所有内容时,如何/我仍然可以分离代码(在 WelcomeViewController.h 中有 IBActions 用于仅在此子视图上发生的操作)?

我想我在第一段中回答了这个问题——WelcomeViewController 仍然存在,你所要做的就是创建 IBOutlets 并将它们连接到 IB 中。当然,您也可以通过编程方式进行连接,因为成员“视图”是自动填充的(通过文件的所有者连接),并且所有子视图都可以从那里访问。

于 2011-08-19T23:36:51.817 回答