UIStoryBoard получает первый контроллер представления от ApplicationDelegate - PullRequest
11 голосов
/ 06 ноября 2011

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

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

Ответы [ 3 ]

22 голосов
/ 15 ноября 2011

Я не уверен, правильно ли я понимаю вопрос, думаю, вы спрашиваете, как получить первый 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;
}
15 голосов
/ 09 мая 2013

Вместо создания новой копии существующей раскадровки с помощью

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

вы можете установить в заголовочном файле делегата приложения это свойство

@property (nonatomic, weak) UIViewController* initialViewController;

и в этом методе просто назначить себя.window.rootViewController для свойства

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

    return YES;
}

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

0 голосов
/ 20 апреля 2016

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