如何在运行时获取主故事板?

内容来源于 Stack Overflow,并遵循CC BY-SA 3.0许可协议进行翻译与使用

  • 回答 (2)
  • 关注 (0)
  • 查看 (17)

我希望能够[UIStoryboard mainStoryboard]在运行时简单地调用iPad或iPhone故事板。

提问于
用户回答回答于

下面是一个UIStoryboard类别,它将这样做:

UIStoryboard+LDMain.h

#import <UIKit/UIKit.h>

@interface UIStoryboard (LDMain)

+ (instancetype)LDMainStoryboard;

@end

UIStoryboard+LDMain.m

#import "UIStoryboard+LDMain.h"

UIStoryboard *_mainStoryboard = nil;

@implementation UIStoryboard (LDMain)

+ (instancetype)LDMainStoryboard {
    if (!_mainStoryboard) {
        NSBundle *bundle = [NSBundle mainBundle];
        NSString *storyboardName = [bundle objectForInfoDictionaryKey:@"UIMainStoryboardFile"];
        _mainStoryboard = [UIStoryboard storyboardWithName:storyboardName bundle:bundle];
    }
    return _mainStoryboard;
}

@end

用户回答回答于

[UIStoryboard storyboardWithName:storyboardName bundle:bundle]如果故事板尚未加载,则可以使用。

也可以使用viewController.storyboard获取现有的。如果你有一个mainWindow作为你的应用程序委托的一部分(你可能会这样做),你可以得到rootViewController.storyboard这些。

就像是:

UIApplication *application = [UIApplication sharedApplication];
MyAppDelegate *myAppDelegate = ((MyAppDelegate *)application).delegate;
return myAppDelegate.mainWindow.rootViewController.storyboard;

如果没有,这可能适合你:

UIApplication *application = [UIApplication sharedApplication];
UIWindow *backWindow = application.windows[0];
return backWindow.rootViewController.storyboard

扫码关注云+社区