2013-08-19 6 views
1

У меня есть вид входа, который проверяет, имеются ли настройки по умолчанию, а затем синхронизирует данные. Если параметров по умолчанию нет, просмотр ожидает входа пользователя. если настройки и синхронизация данных правильны, он должен переключиться на мой режим разделения.Переключатель iOS rootViewController не работает

Код работает, если пользователь вводит свою регистрационную информацию. Он синхронизирует данные, затем переключает представление. Если пользователь уже вошел в систему, он попадает в функцию и не переключает представление.

Вот код, вызывается обоими путями:

-(void)redirect{ 
    NSLog(@"[email protected]"); 
    UISplitViewController *split = [self.storyboard instantiateViewControllerWithIdentifier:@"orders_split"]; 
    [self.view.window setRootViewController:split]; 
} 

«Перенаправление @» показывает в журнале на начальной загрузки, если пользователь уже вошел в один раз. Я подтвердил, что ошибок синхронизации нет, он выполняет функцию, но не выполняет переключатель.

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

ответ

12

пытаются использовать приложение делегата:

UISplitViewController *split = [self.storyboard instantiateViewControllerWithIdentifier:@"orders_split"]; 
MyAppDelegate *appDelegate = (MyAppDelegate *)[[UIApplication sharedApplication] delegate]; 
appDelegate.window.rootViewController = split; 

в моих проектах я делаю это с анимацией:

+(void)setRootController:(UIViewController*)controller 
       storyboard:(UIStoryboard*)storyboard{ 

      MyAppDelegate *appDelegate = (MyAppDelegate *)[[UIApplication sharedApplication] delegate]; 

      [UIView 
      transitionWithView:appDelegate.window 
      duration:0.5 
      options:UIViewAnimationOptionTransitionCrossDissolve 
      animations:^(void) { 
       BOOL oldState = [UIView areAnimationsEnabled]; 

       [UIView setAnimationsEnabled:NO]; 

       appDelegate.window.rootViewController = controller; 

       [UIView setAnimationsEnabled:oldState]; 
      } 
      completion:nil]; 
} 
+0

Да, чтобы расширить на этом, я думаю, что в вашем примере 'self.view .window' nil, поэтому он ничего не делает. Проверьте это с помощью отладчика и убедитесь, что у вас есть указатель на окно приложения. – Idles

+0

Я думал, что у меня тоже проблема с self.view.window. Это сработало отлично. Благодаря! –

+0

@TylerKiser добро пожаловать –

Смежные вопросы