【问题标题】:Universal iPad/iPhone XIBs - Xcode 4通用 iPad/iPhone XIB - Xcode 4
【发布时间】:2011-09-10 09:59:22
【问题描述】:

我想制作一个具有两个不同 XIB 文件的通用应用程序。一个用于 iPhone,一个用于 iPad。他们使用相同的代码,只是不同的用户界面。如何创建“通用”应用程序?

谢谢。

【问题讨论】:

  • 在 Xcode 中创建新项目时有一个选项
  • @PengOne 在哪里?我正在创建一个基于视图的项目。

标签: iphone ipad xcode4 xib universal


【解决方案1】:

首先(您说您正在创建基于视图的应用程序),基于 iPhone 或 iPad 视图创建它。

这将为您提供一个 appdelegate、一个视图控制器和一个视图(根据您选择的选项为 iPad 或 iPhone 量身定制)

现在添加另一个 xib,转到文件 > 新文件...查看对话框左侧并在 iOS 组中选择“用户界面”。在右侧窗格中,选择查看并单击下一步,现在在创建 xib 时选择 iPad 或 iPhone(根据您最初选择的内容),选择它,然后选择主窗格左侧的文件所有者。然后,转到实用程序(右窗格)并选择身份检查器(顶部的第三个选项图标),将类更改为与创建基于视图的应用程序时创建的相同的 viewController。您可以在两个视图上以相同的方式绑定 outlet,但它们将共享相同的 viewController。

在运行时确定你的应用在哪个设备上运行,你可以使用约定

if (UI_USER_INTERFACE_IDIOM() == UIUserInterfaceIdiomPad)

并基于这种条件语句加载视图。为清楚起见,请记住您使用其名称加载 nib,以便您可以选择与环境相关的 nib(如上),其余的由框架完成。

请注意,它从来没有您想象的那么简单(如果您以前从未这样做过) 充分利用 iPad 的空间的应用程序通常倾向于使用专用视图更好地工作,尽管这肯定不总是案子。考虑到屏幕空间的差异,任何动态添加的屏幕组件都需要这样编码。

这很容易变成一篇文章,我建议你阅读一下,查看源代码并深入研究。通过实验你会学到很多东西。

【讨论】:

    【解决方案2】:

    如果您有现有的应用程序,则可以选择 目标-->iPad/iPhone 升级

    然后添加代码以检查应用程序是在 iPad 还是 iPhone 上运行。

    if (UI_USER_INTERFACE_IDIOM() == UIUserInterfaceIdiomPad)
    {
        //load xib of ipad
    }
    else
    {
        //load xib of iphone
    }
    

    【讨论】:

    【解决方案3】:

    您还可以使用 xcode 4 的功能。创建新项目时有一个选项,称为“通用应用程序”。 基于此模板的应用程序使用上述分隔。 你会得到 iphone 和 ipad 的文件夹,里面有视图。

    【讨论】:

      【解决方案4】:

      只需复制 xib 文件,然后将其重命名为 FileName~ipad.xib,将其添加到您的项目中,iOS 会根据您的设备自动加载正确的 xib 文件。

      【讨论】:

        【解决方案5】:

        像这样创建一个宏:

        #define IS_IPAD ([[UIDevice currentDevice] userInterfaceIdiom] == UIUserInterfaceIdiomPad)
        

        为您的 XIB 命名以便您可以执行此操作:

        self.viewController = [[ViewController alloc] initWithNibName:IS_IPAD?@"ViewController~iPad":@"ViewController" bundle:nil];
        

        【讨论】:

        • 宏传统上采用 ALL_CAPS 格式。
        • @Richard 这是真的。
        【解决方案6】:
        - (BOOL)shouldAutorotateToInterfaceOrientation:(UIInterfaceOrientation)interfaceOrientation
        {
         UIInterfaceOrientation des=self.interfaceOrientation;
         if(UI_USER_INTERFACE_IDIOM()==UIUserInterfaceIdiomPad) //ipad
         {
            if (des==UIInterfaceOrientationPortrait||des==UIInterfaceOrientationPortraitUpsideDown)
            {
              //Ipad portarit
            } 
            else
            {
               //ipad landscape
            }
        else //iPhone
        {
        if (des==UIInterfaceOrientationPortrait||des==UIInterfaceOrientationPortraitUpsideDown)
            {
              //iPhone portarit
            } 
            else
            {
               //iPhone landscape
            }
        }
        

        【讨论】:

          猜你喜欢
          • 2012-07-08
          • 2011-07-28
          • 2012-05-14
          • 2011-07-17
          • 1970-01-01
          • 2012-11-28
          • 2011-07-13
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多