UIStoryBoard получает контроллер первого вида из ApplicationDelegate

У меня есть протокол, который реализует приложение ApplicationDelegate. Я хочу передать это на первый контроллер представления, определенный в доске объявлений. Как получить доступ к нему из метода?

- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions

Ответ 1

Я не уверен, правильно ли понимаю вопрос. Думаю, вы спрашиваете, как вы получаете первый viewController в раскадровке. Чтобы получить это, вы вызываете

UIStoryboard *storybord = [UIStoryboard storyboardWithName:@"MainStoryboard" bundle:nil];
UIViewController *vc =[storybord instantiateInitialViewController];

Измените имя раскадровки в соответствии с вашим именем, MainStoryboard - это только имя по умолчанию. Надеюсь, это то, что вы искали.

Edit:

- (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;
}

Ответ 2

Вместо того, чтобы создать новую копию существующей раскадровки, используя

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;
}

Это должно работать, потому что в свойстве window приложения делегат-протокол имеет доступ к rootViewConroller, и этот контроллер является initialViewController, если использует раскадровки.

Ответ 3

Внедрение 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
    }