Я бы хотел просто вызвать [UIStoryboard mainStoryboard]
, чтобы получить раскадровку iPad или iPhone во время выполнения.
Получить основную раскадровку во время выполнения
Ответ 1
Здесь категория 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
Здесь ссылка на суть
Ответ 2
Вы можете использовать [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