17

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

4

2 回答 2

21

这是一个 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

这是要点的链接

于 2013-10-11T21:36:29.343 回答
13

[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
于 2013-10-11T22:37:59.973 回答