【问题标题】:How to make iPhone and iPad version of an app?如何制作 iPhone 和 iPad 版本的应用程序?
【发布时间】:2011-02-05 18:02:01
【问题描述】:

我正在尝试制作一个适用于 iPhone 和 iPad 的应用程序。我正在寻找如何使接口兼容两者。当应用程序加载时,我正在显示一个表格视图。如何根据设备加载不同的笔尖?我正在使用它在笔尖之间切换。

if ([[UIDevice currentDevice] respondsToSelector:@selector(userInterfaceIdiom)]) 
    {
        if ([[UIDevice currentDevice] userInterfaceIdiom] == UIUserInterfaceIdiomPad) 
        {
            device = @"iPad";
        }
        else 
        {
            device = @"iPhone";
        }

    }

但在 MainWindow.xib 中,它说视图是从 iPhone 的视图控制器加载的。我可以根据设备进行动态处理吗?即我想从应用程序开始显示基于设备的不同笔尖。 谢谢。

【问题讨论】:

    标签: iphone objective-c ipad uiview


    【解决方案1】:

    实际上,Apple 会自动执行所有这些操作,只需命名您的 NIB 文件即可:

    MyViewController~iphone.xib // iPhone
    MyViewController~ipad.xib // iPad
    

    并用最少的代码加载您的视图控制器:

    [[MyViewController alloc] initWithNibName:nil bundle:nil]; // Apple will take care of everything
    

    【讨论】:

    • 注意:正如最近有人在邮件列表中发布的那样……请注意正确处理案例! Apple 的特殊代码区分大小写 - 如果您将其拼写为“iPhone”或“iPad”,您会发现这无声无息地失败了,没有任何解释 :(
    • @Adam 这不适用于 ios5。我尝试使用 ios6,它工作正常。知道为什么不工作吗?
    • 在 iOS 4 + 5 + 6 中对我来说效果很好。仔细检查所有文件的大小写敏感性,并在重建之前尝试“清理”。还要检查你有 0 个警告。
    【解决方案2】:

    你可以用类似的方式做到这一点:

    if (UI_USER_INTERFACE_IDIOM() == UIUserInterfaceIdiomPad){
        mainMenu = [[MainMenu alloc] initWithNibName:@"MainMenuiPad" bundle:nil]; 
    }else{  
        mainMenu = [[MainMenu alloc] initWithNibName:@"MainMenu" bundle:nil]; 
    }
    

    【讨论】:

    • 感谢您的回复。正如我所说,当我们在界面构建器中打开 MainWindow.xib 时,它会显示“视图是从 abc_iPhoneAppViewController 加载的”,它是 iPhone 的 UI。如何将其更改为 iPad 之一。在 IB 中或通过代码。你能举一个详细的例子吗?谢谢
    【解决方案3】:

    为了制作通用应用,

    在 iPhone/iPad 等应用的信息构建选项卡中设置 1 个目标系列。

    2- 从主窗口中删除窗口。

    3- 添加两个 xib 一个用于 iPhone 和一个用于 iPad(通过选择 iPad xib)。

    4- 将 appDelegate 类作为这些 xib 的控制器文件。

    5- 在这些 xib 和视图控制器或导航控制器上添加窗口,并通过 IB Inspector 在此处设置加载 nib 名称和控制器文件,这是您的第一个视图。

    6- 然后为具有 tableview 或其他控件的 iPad 和 iPhone 制作不同的 xib。

    7-为不同的设备制作单个控制器文件或不同的控制器文件,如果其他情况,您需要通过此检查设备

    if (UI_USER_INTERFACE_IDIOM() == UIUserInterfaceIdiomPad){
    

    8-现在你需要在方法didFinishL的appDelegate类中加载xib--

    if (UI_USER_INTERFACE_IDIOM() == UIUserInterfaceIdiomPad){
    
       // load your nib for iPad here which having view controler or navigation controller as well window.
    }else{  
        //load nib for iPhone. 
    }
    

    【讨论】:

      【解决方案4】:

      在您的 Info.plist 中试试这个:
      主 nib 文件基本名称 [NSMainNibFile]:MainWindow_iPhone
      主 nib 文件基本名称 (iPad) [NSMainNibFile~ipad]: MainWindow_iPad

      希望对你有帮助。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2010-11-11
        • 2011-08-21
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多