【问题标题】:Switching StoryBoards (iphone/iPad) without code?无需代码即可切换 StoryBoards (iphone/iPad)?
【发布时间】:2014-04-26 09:57:13
【问题描述】:

目前我是这样做的

UIStoryboard *storyboard = [UIStoryboard storyboardWithName:
     ([[UIDevice currentDevice] userInterfaceIdiom] == UIUserInterfaceIdiomPad)?
                                @"Main_iPad" : @"Main_iPhone" bundle:nil];

但我很想像 UIImage 那样做:

UIStoryboard *storyboard = [UIStoryboard storyboardWithName:@"Main" bundle:nil];

然后将其留给XCode 来确定使用后缀查找的位置。

这可能吗?如果是这样怎么办?如果不是为什么?

【问题讨论】:

  • 如果您只使用一个故事板(按外形尺寸),您可以在 Info.plist 中设置它。在项目文件中选择您的应用程序,在目标中选择您的应用程序,选择常规选项卡,在部署信息下您可以通过切换设备弹出窗口来更改主界面。
  • @David 我不明白你的建议,我有 2 个故事板,我不想做检查。我希望 xCode 像 @2x.png 一样查找后缀
  • AFAIK,您可以使用后缀 ~ipad~iphone 作为 nib 文件名,但不能用于情节提要。我认为这种遗漏没有充分的理由。
  • 从通用项目开始。然后会自动加载相应的故事板。
  • 它是一个通用的应用程序,我使用这行代码来模态地呈现视图

标签: ios iphone objective-c ipad storyboard


【解决方案1】:

那些 _iPad 和 _iPhone 后缀是简单的标识符,可以在您创建新故事板时随意更改,它们与 @2x 的东西(或图像资产)无关。 但是,如果您大量使用不同的故事板(以使它们的编辑更简单和更流畅,并且它们的版本控制合并更安全),您可以在 UIStoryboard 上编写一个类别,并使用类似的方法在一个地方编写自己的逻辑

+ (UIStoryboard*) appropriateStoryboardWithName:(NSString*) name bundle:(NSBundle*) bundle             
{
    name = [name stringByAppendingString:
    ([[UIDevice currentDevice] userInterfaceIdiom] == UIUserInterfaceIdiomPad) ? @"_iPad" : @"_iPhone"];
    return [UIStoryboard storyboardWithName:name bundle:bundle];
} 

【讨论】:

  • 所以基本上我想要实现的目标是不可能的吧?
【解决方案2】:

如果您希望 x 代码决定您需要打开 info.plist 和 指定应为 iPad 和 iphone 使用的情节提要。

找到带有 KEY - 主情节提要文件基本名称的行。

你的 info.plist 必须有这两行

KEY                                       TYPE       VALUE

Main storyboard file base name (iPad)    String     Main_iPad
Main storyboard file base name (iPhone)  String     Main_iPhone

现在每次您的应用启动时,x-code 都会决定在没有代码的情况下加载哪个故事板

希望对你有帮助

祝你好运!!

【讨论】:

    【解决方案3】:

    而不是编写所有代码:

    UIStoryboard *storyboard = [UIStoryboard storyboardWithName:
         ([[UIDevice currentDevice] userInterfaceIdiom] == UIUserInterfaceIdiomPad)?
                                    @"Main_iPad" : @"Main_iPhone" bundle:nil];
    

    如果你调用self.storyboard,Xcode 可以加载正确的故事板。

    所以你直接使用它,例如:

    someViewController *pieVC = [self.storyboard 
                                 instantiateViewControllerWithIdentifier:@"someView"];
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2023-01-03
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-10-17
      • 1970-01-01
      相关资源
      最近更新 更多