代码之家  ›  专栏  ›  技术社区  ›  Christian Di Lorenzo

在运行时获取主情节提要

  •  17
  • Christian Di Lorenzo  · 技术社区  · 11 年前

    我希望能够简单地打电话 [UIStoryboard mainStoryboard] 在运行时获取iPad或iPhone的故事板。

    2 回复  |  直到 11 年前
        1
  •  21
  •   jscs    11 年前

    这是一个UIStoryboard类别,可以做到这一点:

    U存储板+LDMain.h

    #import <UIKit/UIKit.h>
    
    @interface UIStoryboard (LDMain)
    
    + (instancetype)LDMainStoryboard;
    
    @end
    

    UIS主板+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
    

    这是一个 link to the gist

        2
  •  13
  •   Steven Fisher    11 年前

    您可以使用 [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