【问题标题】:Converting an iphone application into an iPad , iOS?将 iphone 应用程序转换为 iPad、iOS?
【发布时间】:2013-02-12 08:19:50
【问题描述】:

我目前有一个 iOS iPhone 应用程序。

我想做的是让它通用,这样我也可以瞄准 iPad。

我所做的是转到目标并将 iOS 应用程序目标从 iPhone 更改为通用。

现在,当我在 iPad 上运行应用程序时,它会自动调整 iPad 的所有视图的大小。

但是有些视图,背景图片看起来不太好,因为我需要使用更高分辨率的图片,或者一般我应该在 iPad 版本中更改一些东西。

iPad .nib 文件在哪里???我的意思是,我只看到 iPhone 的。当我在我的 iphone 上运行它时,会使用这些文件。当我在我的 iPad 上运行它时,一切都正确调整了大小,但是这些 .nib 文件到底在哪里?

我阅读的教程(相当旧)建议,当您也以 iPad 为目标时,应该为 ipad 创建新的 .nib 文件。为什么我看不到这些文件?

【问题讨论】:

    标签: iphone ios xcode ipad universal


    【解决方案1】:

    您只需要创建新的 .xib 文件并将它们设置为相同的类,然后您可以使用以下条件初始化该 viewController:

    if (UI_USER_INTERFACE_IDIOM() == UIUserInterfaceIdiomPad)
    {
         yourVC = [[YourViewController alloc] initWithNibName:"YourViewController_ipad" andBundle:nil];
    }
    else
    {
        yourVC = [[YourViewController alloc] initWithNibName:"YourViewController" andBundle:nil];
    }
    

    只要有可能,您应该尝试使用相同的 .xib,但在很多情况下,这样做是不可能的,而且看起来不错,所以您只需再做一次。 Xcode 不会自动为您执行此操作。

    【讨论】:

    • 所以对于我只使用表格视图的 .nib 文件,例如它不需要创建一个新的,但是对于需要更改的那些我在我的代码中添加它并创建另一个 nib?但是为什么我看到项目有 2 个不同的 .xib 文件,比如 ViewController_iphone.nib 和 ViewController_ipad.nib 并且绝对没有代码“告诉”应用程序使用哪个,但最终当你在 iphone 上运行时是正确的,当你再次运行ipad是正确的吗?他们是怎么做到的?
    • @d0nparalias 这在 `AppDelegate.那里有相同的代码。
    • 如果你检查 Kitsune 的答案,那就是我在说什么,不需要写任何代码。
    • 是的,这是真的,我有点忘记了这一点。如果您可以只使用一个 .xib 并检查您所使用的设备并切换一些 UI 组件(假设可以这样做),那就更好了。避免多个版本的 .xib 总是好的
    • @rooster117 您可以向 XIB 类添加多个视图,然后将 view_iPad 添加为该类的对象(您将有两个视图:self.view 用于 iPhone,self.view_iPad 用于 iPad .
    【解决方案2】:

    假设你有一堂课。我们称之为Two

    这是构成Two 类的当前文件。

    Two.h
    Two.m
    Two.xib
    

    Two.xib 包含一个大小适合 iPhone 的 UIView。为了制作适合 iPad 大小的视图,您应该创建一个新的 XIB 文件(将其命名为 Two_iPad.xib),将 XIB 连接到 Two,在 iPad 的 Two_iPad.xib 中调整 UIView 的大小,并相应地进行设计.

    当您创建Two 的新实例时,请执行以下操作。

    Two *two;
    
    if (UI_USER_INTERFACE_IDIOM() == UIUserInterfaceIdiomPad) {
        //they are using an iPad
    
        two = [[Two alloc] initWithNibName:@"Two_iPad" bundle:nil];
    
    } else {
        //they are using an iPhone/iPod Touch
    
        two = [[Two alloc] initWithNibName:@"Two" bundle:nil];
    
    }
    

    您正在创建Two 的新实例;但是,您正在检查用户拥有的设备,并使用相应的 XIB 文件。

    【讨论】:

      【解决方案3】:

      您可以让 iOS 根据扩展自动加载正确的 xib,类似于 Retina 图形的工作方式。如果您的 xib 被命名为 Awesome,并且您希望将其转换为具有 iPhone iPad 版本(而不是共享,重命名它:

      iPhone 版本:

      Awesome~iphone
      

      iPad 版本:

      Awesome~ipad
      

      然后,当你告诉 iOS 加载 Awesome 时,它会根据当前平台自动选择加载哪一个。您的代码中不需要 if 语句!如果您愿意,您仍然可以,但这不是必需的。

      注意:您可能需要在重命名后执行清理操作!有时某些文件在重命名时会保留在构建中。

      【讨论】:

      • 谢谢 Kitsune,这就是我在对 rooster117 答案的评论中所说的。
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-07-16
      • 1970-01-01
      • 1970-01-01
      • 2011-04-10
      • 2011-05-21
      相关资源
      最近更新 更多