Переключение раскадровки iOS на представление, которое не имеет перехода в AppDelegate

У меня есть представление одноразового соглашения, которое будет отображаться только при первом запуске приложения пользователем.

Я использую раскадровку IOS 5.1, а My rootview - это навигационный контроллер. Мое представление соглашения не связано с контроллером навигации. Я просто хочу представить всплывающее окно модального представления, а затем закрыть представление: введите описание изображения  здесь

Я использую следующий код, но он ничего не делает, приложение просто продолжает и запускает навигационный контроллер. Я ставлю флаги, да, приложение вводит оператор if. :

- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions
{
       if(login==ok){
       UIStoryboard *storyboard = [UIApplication sharedApplication].delegate.window.rootViewController.storyboard;
        UIViewController *loginController = [storyboard instantiateViewControllerWithIdentifier:@"AgreementViewController"];
        [self.window.rootViewController presentModalViewController:loginController animated:YES];
        }
return YES;

}

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


person Mord Fustang    schedule 21.09.2012    source источник


Ответы (1)


В приложении, над которым я работал в прошлые выходные, у меня была аналогичная ситуация. Я хотел показать отдельную раскадровку в первый раз для управляемой настройки. Мой код выглядел почти так же, как ваш, и он выдал мне предупреждение, когда я его отлаживал. Это произошло из-за того, что rootViewController, на котором я пытался представить свой одноразовый ViewController, в данный момент не виден в приложении.

Итак, вместо того, чтобы представить мой одноразовый контроллер представления «на» rootViewController, я решил установить свой одноразовый контроллер представления как rootViewController. В вашем случае это будет что-то вроде:

- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions
{
    if(login == ok) {
        UIStoryboard *storyboard = [UIApplication sharedApplication].delegate.window.rootViewController.storyboard;
        UIViewController *loginController = [storyboard instantiateViewControllerWithIdentifier:@"AgreementViewController"];
        [self.window setRootViewController:loginController];
    }

    return YES;
}

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

Другим подходом может быть проверка и переключение просмотра в вашем первом "обычном" представлении viewDidAppear, а не в AppDelegate.

Надеюсь, это укажет вам правильное направление.

person Arno Moonen    schedule 01.10.2012