iOS中iPhone和iPad故事板的区别

3

我正在处理Storyboard。我有两个用于iPhone和iPad的storyboard,我的问题是如何区分这两个界面。

我分享一下我所做的代码:

// I am writing this code in AppDelegate Method.

UIStoryboard *loStoryboard ;
if (loStoryboard == [UIStoryboard storyboardWithName:@"Main_iPhone" bundle:nil])
{
  // iPhone  .....
}
else
{
  // iPad....
} 

但它没能正常工作。


loStoryboard 是如何定义的? - Larme
为什么要区分?正确的故事板将自动加载。此外,loStoryboard 将为空。您的控制器应该能够处理 iPad 和 iPhone 故事板,而不需要丑陋的 if-else 块。如果您真的需要检查设备,请使用此链接:https://dev59.com/vWkw5IYBdhLWcg3wDWTL - Marc
你的代码是有效的。它完全按照你的要求执行。它基于Main_iPhone实例化了Storyboard,无论应用程序是在iPhone还是iPad上运行。我建议采纳Muhammet的建议。或者选择稍微成熟一些的David的建议。 - Hermann Klecker
3个回答

6

试试这个。

在你的AppDelegate方法中,首先定义这个:

#define IPHONE_STORYBOARD_NAME  @"Main_iPhone";
#define IPAD_STORYBOARD_NAME    @"Main_iPad";

接下来声明这个方法:

+ (NSString *)storyboardName
{
   if ([[UIDevice currentDevice] userInterfaceIdiom] == UIUserInterfaceIdiomPhone) {
       return IPHONE_STORYBOARD_NAME;
   } else {
       return IPAD_STORYBOARD_NAME;
   }
}

你需要在想要调用 storyboardName 方法的地方进行操作。

UIStoryboard *storyboard = [UIStoryboard storyboardWithName:[AppDelegate storyboardName] bundle:nil];

我想这会对您有所帮助 :)

0

你不需要区分接口。这段代码将返回正在工作的设备:

if (UI_USER_INTERFACE_IDIOM() == UIUserInterfaceIdiomPad)
{
        //Ipad
}
else
{
        //Ipod-Iphone
}

0

你不需要区分记分牌。我们只在Xcode中区分(哪个接口使用哪个记分牌):

部署信息 -> 主界面 -> 故事板名称 或者你可以通过编程方式进行区分:

  #define interfaceType    UI_USER_INTERFACE_IDIOM()

    #define IPAD     UIUserInterfaceIdiomPad

    if ( interfaceType == IPAD ) {
    /* do for iPad. */

    } else {

    `enter code here`
    }

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接