如何制作以编程方式使用 UISplitViewController 和 UINavigationController 的通用 iPhone / iPad 应用程序?

Posted

技术标签:

【中文标题】如何制作以编程方式使用 UISplitViewController 和 UINavigationController 的通用 iPhone / iPad 应用程序?【英文标题】:How do I make a universal iPhone / iPad application that programmatically uses UISplitViewController and UINavigationController? 【发布时间】:2010-05-09 04:28:27 【问题描述】:

我无法在任何地方找到一个好的答案。我正在为我的 iPhone 应用程序使用 UINavigationController,所有内容都是以编程方式生成的,在 Interface Builder 中没有任何内容。我正在尝试使用 UISplitViewController 和现有的 UINavigationController 将我的应用程序移植到 iPad,但我不确定我的程序逻辑应该在哪里分离 iPhone 或 iPad 的视图控制器。

我是否将我的主文件设置为使用不同的应用程序委托,或者我是否使用相同的应用程序委托并有条件地在其中设置用户界面?

除此之外,每当我尝试在模拟器上编译我的应用程序时,它都无法识别 UISplitViewController,甚至无法识别我检查类是否存在的条件。

请记住我没有使用任何 xib,请有人将我引向正确的方向吗?

【问题讨论】:

【参考方案1】:

如果你想看一个使用拆分视图的完全程序化的iPhone/iPad界面的例子,你可以下载我的应用程序Molecules的源代码。

在该应用程序中,我使用一个应用程序委托,但我根据存在的用户界面惯用语(iPad 或 iPhone)设置了不同的界面。对于 iPhone,我实例化了一个根视图控制器,它管理该设备的适当接口。对于 iPad,我首先创建一个 UISplitViewController 并将其附加到根窗口,然后创建我的 iPad 特定的根视图控制器并将其放置为拆分视图控制器的详细视图(使用我用于项目选择的导航控制器作为拆分视图的左侧控制器)。

再次,我建议查看该应用程序项目,了解我如何以编程方式进行设置。该代码在 BSD 许可下可用,因此您可以根据需要将其复制并粘贴到您自己的应用程序中。

就您遇到的编译错误而言,您需要使用“升级 iPad 的当前目标”菜单选项将应用程序目标迁移为通用应用程序。完成后,将您的构建 SDK 设置为 3.2。转到应用程序的构建设置并将其部署目标设置为您希望应用程序支持的最早操作系统(3.0 是您可以使用的最远版本)。

最后,你需要弱链接 UIKit。有关如何做到这一点,请参阅我的回答 here。 如果您使用 ios 4.2 或更高版本的 SDK 构建,则不再需要框架的弱链接。只需在运行时通过查看它们的 +class 方法是否返回 nil 来检查是否存在适当的类。

【讨论】:

非常感谢,分子源代码真的帮助我理解了整个事情。我正在为我的表格视图使用拆分视图的侧视图,该视图共享我现有的表格视图哦 iphone 应用程序,拆分视图的详细视图现在由另外两个视图组成,并且用于导航控制器访问。顺便说一句,我喜欢在 ipad 上看到 pi 的立方体。 我也用过 [[UIApplication sharedApplication].delegate performSelector:@selector(PushMyViewController)];在我的右视图上推送 ViewController .. 好还是坏?我担心以后会发生可怕的事情大声笑 感谢提供分子资源!当我使用 Active SDK = Simulator 3.2 构建时,我可以运行 iPad 模拟器。但是如何在 iPhone 模式下使用模拟器测试这个应用程序呢?当我尝试设置 Active SDK = Simulator 3.1.3 时,我得到了几个编译错误(例如,找不到 UISplitViewControllerDelegate 协议声明)。我究竟做错了什么?谢谢! @Clint Harris - 使用 3.2 SDK,无法使用我配置的源代码将 iPhone 作为模拟器中的设备进行构建。如果您获得了 4.0 SDK,您可以将基础 SDK 设置为 4.0(并清除我在 Target 构建设置中对基础 SDK 的任何引用)并能够在模拟器中定位 iPhone 或 iPad。

以上是关于如何制作以编程方式使用 UISplitViewController 和 UINavigationController 的通用 iPhone / iPad 应用程序?的主要内容,如果未能解决你的问题,请参考以下文章

如何制作以编程方式使用 UISplitViewController 和 UINavigationController 的通用 iPhone / iPad 应用程序?

如何以编程方式在 Dijit 对话框中制作和显示表单?

如何在以编程方式制作滚动视图时解决此问题?

在 Swift 中以编程方式制作 Segue

如何以编程方式用笔画制作圆形可绘制对象?

如何以编程方式在eclipse中的同一行上制作两个按钮?