Подтвердить что ты не робот

Получить основную раскадровку во время выполнения

Я бы хотел просто вызвать [UIStoryboard mainStoryboard], чтобы получить раскадровку iPad или iPhone во время выполнения.

4b9b3361

Ответ 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