【发布时间】:2013-10-11 21:36:29
【问题描述】:
我希望能够在运行时简单地调用 [UIStoryboard mainStoryboard] 来获取 iPad 或 iPhone 故事板。
【问题讨论】:
标签: ios objective-c cocoa-touch uistoryboard
我希望能够在运行时简单地调用 [UIStoryboard mainStoryboard] 来获取 iPad 或 iPhone 故事板。
【问题讨论】:
标签: ios objective-c cocoa-touch uistoryboard
这是一个 UIStoryboard 类别,它可以做到这一点:
#import <UIKit/UIKit.h>
@interface UIStoryboard (LDMain)
+ (instancetype)LDMainStoryboard;
@end
#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
【讨论】: