【问题标题】:How To Port an iPhone Application to the iPad (Storyboard)如何将 iPhone 应用程序移植到 iPad(故事板)
【发布时间】:2012-02-20 14:50:51
【问题描述】:

我刚刚完成了我的 iPhone 应用程序,我想让它成为通用的。我已经阅读了一些帖子,但它们有点旧(2010 年左右)。

我得到了什么:

  • 最近创建的简单 iPhone 应用 (iOS 5 - Storyboard),具有三个屏幕。
  • 我的应用程序代表一张桌子,上面有三张卡片,您可以翻转触摸它们。用户可以(在第二个屏幕上)输入要在卡片上显示的文本。
  • 创建项目时,我选中了“通用”,所以我有两个故事板。在那之后,我所做的一切都与 iPad 无关(除了我使用 UIModalPresentationPageSheet 的“联系支持”电子邮件选项中的一行)。

我想要完成的事情:

  • iPad 上的相同应用程序:我的应用程序非常简单,我不需要拆分视图或详细信息。我只想要相同的对象和布局,但具有更大更好的图形(表格、卡片等)。

我喜欢它,因为它会是一个很棒的入门级迁移。

我不知道从哪里开始。当我运行 iPad 模拟器时,出现白屏,仅此而已。

【问题讨论】:

  • 呃...编辑 iPad 故事板将是一个不错的起点。
  • 那么对于您的 iPad 版本,您需要重新制作整个情节提要并重新使用代码吗?再次添加按钮、标签和每个 UI 元素并将它们与您当前的方法联系起来?
  • 是的,iPhone 和 iPad 平台非常非常模拟器。除了少数例外,您应该可以毫无问题地做到这一点。
  • 在我的例子中,唯一需要能够将 UIButtons 连接到新 Storyboard 的就是添加“IBOutlet”声明。

标签: ios5 migration port storyboard universal


【解决方案1】:

在finder中打开Storyboard文件,复制你的iPhone-Storyboard并重命名为Main-iPad.storyboard

在xCode中,右键点击storyboard -> “open as” -> “Source Code”

搜索 targetRuntime="iOS.CocoaTouch" 并将其设为 targetRuntime="iOS.CocoaTouch.iPad"

现在保存所有内容并重新打开 Xcode -> iPad 故事板包含与 iPhone 文件相同的内容,但所有内容都可能杂乱无章,您必须自己安排。

最后为了得到 iPad 格式也将 MainStoryboard_iPad.storyboard 中的代码从: 改为

然后转到您的“StroryBoardEx-Info.plist”文件,搜索“Main nib file base name (iPad)”并将其设为“Main-iPad.storyboard”

【讨论】:

    【解决方案2】:

    如果您只想重复使用您的 iphone 故事板,只需转到您的项目设置。在 TARGETS 选项卡信息中,有“主故事板文件基本名称”和“主故事板文件基本名称 (iPad)”行。只需将 iPad 编辑为与另一台具有相同的值。就我而言,我必须将其编辑为“主故事板文件基本名称 (iPad)”,值为“MainStoryboard_iPhone”。

    【讨论】:

    • 将设备设置为通用,这可以完美运行(如果您的自动布局是正确的)
    【解决方案3】:

    好吧,这已经完成了。

    与几乎所有事情一样,一旦您知道该怎么做,这很容易。

    我想说,对于像我这样的情况,UI 的变化不会超过大小或 (x,y) 坐标,可以这样总结:

    1. 复制 iPad Storyboard 上的每个 UI 元素(复制和粘贴即可)并根据需要调整位置和大小
    2. 再次重新接线。每个按钮、segue(您还必须再次添加 segue 名称)等。
    3. 在您的代码中验证您的 UI 受到影响的每个地方(例如 x,y 坐标),确定应用程序是在 iPhone 还是 iPad 上运行,并相应地划分您的代码
    4. 如果您对应用程序进行了任何本地化,则必须更新 iPad Storyboard 上的新 UI 元素
    5. 在模拟器上选择要测试的目标并试一试

    为了确定应用程序在哪个设备上运行,您可以使用以下命令:

    if(UI_USER_INTERFACE_IDIOM() == UIUserInterfaceIdiomPad) {
        //I'm running on the iPad
    } else {
        //I'm running on the iPhone
    }
    

    就是这样。同样,在像我这样的简单案例中,代码的重用是绝对的(100%),您必须添加的新代码是最少的(基本上是需要的 IF 语句),并且 UI 元素的复制就像复制和粘贴一样简单.

    我希望这对其他人有用,如果您有改进建议,我们非常欢迎。

    【讨论】:

    • 这不是解决这个问题的最佳方法吗?引入错误/错过更新 UI 元素、错误命名事物等的可能性似乎很大。 :(
    • 查看这个答案stackoverflow.com/questions/8465769/…(它是这个问题的cmets之一,但隐藏得很深)
    猜你喜欢
    • 2016-05-31
    • 1970-01-01
    • 2014-11-22
    • 2011-02-23
    • 2011-12-14
    • 2023-03-11
    • 2011-03-02
    • 2023-03-22
    • 2016-08-10
    相关资源
    最近更新 更多