Ich mag würde die Lage sein, einfach [UIStoryboard mainStoryboard]
rufen entweder das iPad oder iPhone Storyboard zur Laufzeit zu erhalten.Holen Sie sich die Haupt-Storyboard zur Laufzeit
17
A
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
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
Kategorien auf Framework-Klassen sollten immer Präfixe verwenden, um Namenskollisionen zu vermeiden. –
Danke. Ich habe die Änderungen vorgenommen. –
Kühl; die Methodennamen sind jedoch eigentlich der wichtigere Teil. –