我有一个我的ApplicationDelegate实现的协议。我想把它传递给故事板中定义的第一个视图控制器。如何从该方法访问它?UIStoryBoard从ApplicationDelegate获取第一个视图控制器
- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions
我有一个我的ApplicationDelegate实现的协议。我想把它传递给故事板中定义的第一个视图控制器。如何从该方法访问它?UIStoryBoard从ApplicationDelegate获取第一个视图控制器
- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions
我不知道如果我理解正确的问题,我认为你是问你如何让在故事板第一的viewController。为了得到这个电话,
UIStoryboard *storybord = [UIStoryboard storyboardWithName:@"MainStoryboard" bundle:nil];
UIViewController *vc =[storybord instantiateInitialViewController];
更改故事板的名称以适合您的名字,MainStoryboard只是默认名称。希望这是你正在寻找的。
编辑:
- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions
{
UIStoryboard *storybord = [UIStoryboard storyboardWithName:@"MainStoryboard" bundle:nil];
UIViewController *vc =[storybord instantiateInitialViewController];
//set the delegate on the view controller that you have loaded
// Override point for customization after application launch.
return YES;
}
而是然后用
UIStoryboard *storybord = [UIStoryboard storyboardWithName:@"MainStoryboard" bundle:nil];
您可以在您的应用程序委托的头文件设置该属性
@property (nonatomic, weak) UIViewController* initialViewController;
和创造现有故事板的新副本此方法只需将self.window.rootViewController分配给属性
- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions
{
self.initialViewController = self.window.rootViewController;
return YES;
}
这应该工作,因为在窗口的应用程序委托协议的属性是访问rootViewConroller这个控制器initialViewController如果用故事板。
Swift 2.0为那些想要的实现。
您可能需要修改STROYBAORD和控制器视图标识符。另外o
func application(application: UIApplication, didFinishLaunchingWithOptions launchOptions: [NSObject: AnyObject]?) -> Bool {
let storyboard: UIStoryboard = UIStoryboard(name: "[STORYBOARD NAME]", bundle: nil)
let viewController:UIViewController = storyboard.instantiateViewControllerWithIdentifier("[CONTROLLER IDENTIFIER]") // You have replace UIViewController with you customer controll type
self.window?.rootViewController = viewController
self.window?.makeKeyAndVisible()
return true
}
是的,这就是我所需要的。关于如何在通用应用程序(iphone vs ipad)中加载设备的正确故事板的任何想法? –
这应该这样做 'UIViewController * vc;如果(UI_USER_INTERFACE_IDIOM()== UIUserInterfaceIdiomPad){UIStoryboard * storybord = [UIStoryboard storyboardWithName:@“MainiPadStoryboard”bundle:nil]; vc = [storybord instantiateInitialViewController]; } else { UIStoryboard * storybord = [UIStoryboard storyboardWithName:@“MainiPhoneStoryboard”bundle:nil]; vc = [storybord instantiateInitialViewController]; }' –
很确定这是抓取一个新的副本,而不是现有的副本。 –