UIStoryBoard从ApplicationDelegate获取第一个视图控制器

Ara*_*and 10 ios ios5 uistoryboard

我有一个ApplicationDelegate实现的协议.我想将它传递给故事板中定义的第一个视图控制器.如何从该方法访问它?

- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions
Run Code Online (Sandbox Code Playgroud)

Sco*_*ood 22

我不确定我是否正确理解了这个问题我想你是在问如何在故事板中获得第一个viewController.要打电话给你,

UIStoryboard *storybord = [UIStoryboard storyboardWithName:@"MainStoryboard" bundle:nil];
UIViewController *vc =[storybord instantiateInitialViewController];
Run Code Online (Sandbox Code Playgroud)

更改故事板的名称以适合您的名称,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;
}
Run Code Online (Sandbox Code Playgroud)

  • 很确定这是一个新的副本,而不是现有的副本. (11认同)
  • 如果您不想对故事板名称进行硬编码,正如Scott所指出的那样,iPhone和iPad的名称将在info.plist文件中定义,它可以按如下方式提取:NSString*storyBoardName = [[NSBundle mainBundle] .infoDictionary objectForKey:@"UIMainStoryboardFile"]; self.storyboard = [UIStoryboard storyboardWithName:storyBoardName bundle:[NSBundle mainBundle]]; (2认同)

Pet*_*ger 14

而不是使用创建现有故事板的新副本

UIStoryboard *storybord = [UIStoryboard storyboardWithName:@"MainStoryboard" bundle:nil];
Run Code Online (Sandbox Code Playgroud)

您可以在应用程序委托的头文件中设置此属性

@property (nonatomic, weak) UIViewController* initialViewController;
Run Code Online (Sandbox Code Playgroud)

并在此方法中只需将self.window.rootViewController指定给属性

- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions
{
    self.initialViewController = self.window.rootViewController;

    return YES;
}
Run Code Online (Sandbox Code Playgroud)

这应该工作,因为在app delegate协议的window属性中访问rootViewConroller,如果使用storyboard,这个控制器是initialViewController.