2013-10-11 2 views

Antwort

21

Hier ist eine UIStoryboard Kategorie, die dies tun werde einfach:

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 

Hier ist ein link to the gist

+1

Kategorien auf Framework-Klassen sollten immer Präfixe verwenden, um Namenskollisionen zu vermeiden. –

+0

Danke. Ich habe die Änderungen vorgenommen. –

+1

Kühl; die Methodennamen sind jedoch eigentlich der wichtigere Teil. –

12

Sie können [UIStoryboard storyboardWithName:storyboardName bundle:bundle] verwenden, wenn das Storyboard noch nicht vorhanden ist geladen.

Wenn ja, aber das wird eine neue Kopie laden.

Sie können auch viewController.storyboard verwenden die bestehenden zu erhalten. Wenn Sie einen mainWindow als Teil Ihrer Anwendung Delegierten haben (Sie wahrscheinlich tun), können Sie die rootViewController.storyboard davon zu bekommen.

Etwas wie:

UIApplication *application = [UIApplication sharedApplication]; 
MyAppDelegate *myAppDelegate = ((MyAppDelegate *)application).delegate; 
return myAppDelegate.mainWindow.rootViewController.storyboard; 

Wenn nicht, könnte dies für Sie arbeiten:

UIApplication *application = [UIApplication sharedApplication]; 
UIWindow *backWindow = application.windows[0]; 
return backWindow.rootViewController.storyboard 
Verwandte Themen