选项卡式应用程序中视图控制器的附加 NIB

Posted

技术标签:

【中文标题】选项卡式应用程序中视图控制器的附加 NIB【英文标题】:additional NIB for view controller in tabbed app 【发布时间】:2011-12-22 12:31:19 【问题描述】:

Xcode 4.2,部署目标 ios4.3,不是情节提要,使用 ARC

我从一个选项卡式应用程序模板开始并选择了通用平台,它很好地为我提供了 iPhone (ClassName_iPhone.xib) 和 iPad (ClassName_iPad. xib) 用于 2 个选项卡,在 AppDelegate 中使用 if 语句来确定运行哪个选项卡 - 正是我想要的设置。

我想添加第 3 和第 4 个选项卡,所以从第 3 个选项卡开始(一次做 1 个)我创建了一个新的 UIViewController 子类。由于它没有提供一次创建两个 NIB 的选项,我选择了“Targeted for iPad”,并打算手动创建 iPhone NIB。我在创建的 NIB 文件中添加了“_iPad”后缀,然后创建了一个用户界面视图 NIB 文件,并在其中添加了“_iPhone”后缀。然后,我在 AppDelegate 实现文件中设置新视图控制器的代码以包含第三个视图控制器和选项卡,并使用其他视图控制器类作为设置新类代码的指南。

对于第 3 个 _iPhone NIB,我将对象库中的一个视图对象拖到画布上,并按照其他 2 个 _iPhone NIB 进行设置。但是当我去连接插座时,连接面板的参考插座中没有视图插座可以连接,我认为应该有。此时我怀疑出了什么问题。

我尝试在模拟器中运行它,在 iPad 模式下它运行良好(所有 3 个选项卡都是可点击的)。但在 iPhone 模式下,单击第 3 个选项卡会使线程 1 上的“SIGABRT”崩溃。很明显,我所做的没有奏效。我在输出窗口中看不到任何线索。

作为 obj-c 的新手,所以不太确定这个问题,我会认为我要么:

使用了错误的用户界面模板(视图) 应该使用对象库中的视图控制器对象 (不是视图) 或者我应该在我的视图控制器中声明一些出口 类文件。

但是如果我应该做后两者中的任何一个,那么我的问题是为什么 iPad NIB 可以工作,当它在 NIB 中明显有一个视图对象并且在类文件中没有声明插座时(与两个设备的其他 2 个视图控制器)?

UITabView 类是否以某种方式在其中为前 2 个选项卡预先声明了出口?但这仍然不能解释为什么 _iPad NIB 可以工作。

像往常一样,非常感谢任何帮助和建议,如果有我错过的解释的链接,请告诉我,因为我很乐意进行研究。

如果我在这里做错了什么是无法确定的,那么我想我最终要问的是如何最好地为 iPhone 创建第二个 NIB 文件以与使用 iPad NIB 创建的类啮合的线索。

【问题讨论】:

【参考方案1】:

很抱歉回答我自己的问题,但通过进一步搜索,我发现this 答案就是解决方案,尽管不是全部。所以我想把我所做的放在一个答案中,以便其他人可以参考。

正如 Piotr Czapla 在链接答案中解释的那样,由于某种原因,Xcode 不会填充 connectionRecords 数据,正如您在我的第一个红色箭头中看到的那样。看看工作的视图控制器(第二个红色箭头所在的位置),这就是数据的样子。所以答案是剪切数据并将其粘贴到 NIB 文件中,或者键入它。您可以在 Xcode 中通过右键单击项目导航器中的 NIB 文件然后打开为 > 源代码来执行此操作,这就是您在我的屏幕截图中看到的内容。

我想添加到 Piotr Czapla 的解释中的一点是,第二个红色箭头指向的目标引用对于您要粘贴到的 NIB 文件可能不正确(我的不是)并且 Xcode 可能不允许您回到 IB 模式。如果是这样,您需要从您的 NIB 文件中的 IBUIView 类中获取正确的引用,如第三个红色箭头所指。一旦我将该引用复制到我的目标引用 ref=,如第四个红色箭头所示,一切正常且问题已解决。然后我可以回到 IB 模式(右键单击,打开方式 > Interface Builder - iOS),视图在模拟器中工作。

【讨论】:

以上是关于选项卡式应用程序中视图控制器的附加 NIB的主要内容,如果未能解决你的问题,请参考以下文章

在选项卡式应用程序的导航视图中为表格添加背景图像

我有一个选项卡式视图,如何触发视图运行一些代码,视图由选项卡式视图激活?

使用 swift 在选项卡式应用程序中模态显示和关闭视图

如何在选项卡式应用程序上加载另一个视图控制器而不丢失选项卡

使用swift在选项卡式视图中的导航栏上添加按钮

带有选项卡式导航的 Cocoa-Touch 后退按钮