8

Я довольно новичок в программировании на iOS, и я работаю над iPad-приложением, в котором есть контроллер панели вкладок с 4-мя контроллерами просмотра (с именем FirstViewController, SecondViewController и т. Д.), Прикрепленными к нему. В настоящее время контроллер панели вкладок установлен в качестве начальной точки приложения. Я хочу иметь возможность аутентифицировать пользователя до того, как он достигнет этого момента, поэтому я добавил еще один контроллер просмотра, называемый LoginViewController, который плавает сам по себе в раскадровке.Использование presentModalViewController с раскадровки

Что я хочу сделать, это разрешить загрузке приложения, а в didFinishLaunching, отобразить страницу входа в систему до завершения аутентификации, а затем отменить ее. Я искал последние пару дней, но все, что я пытался, потерпело неудачу.

Моя самая последняя попытка была

UIStoryboard *storyboard = [UIStoryboard storyboardWithName:@"MainStoryboard" bundle:[NSBundle mainBundle]]; 

UINavigationController *loginVC = [storyboard instantiateViewControllerWithIdentifier:@"loginVC"]; 

loginVC.modalPresentationStyle = UIModalPresentationFullScreen; 

[self.window.rootViewController presentModalViewController:loginVC animated:YES]; 

Любая помощь будет оценена. Он компилируется и запускается, но представление вообще не отображается, и я действительно смущен, почему это происходит.

ответ

12

Проблема заключалась в том, я пытался создать его экземпляр в качестве UINavigationController, когда на самом деле это было просто UIViewController. Вызов этого в applicationDidBecomeActive в appDelegate.m сделал трюк.

UIStoryboard *storyboard = [UIStoryboard storyboardWithName:@"MainStoryboard" bundle:nil]; 
UIViewController *loginVC = [storyboard instantiateViewControllerWithIdentifier:@"loginVC"]; 
loginVC.modalPresentationStyle = UIModalPresentationFullScreen;  
[self.window.rootViewController presentModalViewController:loginVC animated:YES]; 
2

Вам необходимо вызвать «presentModalViewController» из отображаемого в текущий момент viewController, а не для отображения, которое должно отображаться. Скорее всего, что-то вроде этого:

[self.window.rootViewController presentModalViewController:loginVC animated:YES]; 
2

В Swift 2, сейчас это:

if let loginController: LoginViewController = mainStoryboard.instantiateViewControllerWithIdentifier("StoryboardControllerID") as? LoginViewController { 
    loginController.modalPresentationStyle = .FullScreen 
    self.window?.rootViewController?.presentViewController(loginController, animated: true, completion: {() -> Void in 
     // do stuff! 
    }) 
}