2016-06-28 5 views
1

self.window.rootViewController.presentedViewControllerself.window.rootViewController.presentedViewController возвращение ноль

всегда возвращаются всухую хотя есть ViewController доступны. Не уверен, что я делаю неправильно.

Ниже приводится полный code-

- (UIInterfaceOrientationMask)application:(UIApplication *)application supportedInterfaceOrientationsForWindow:(UIWindow *)window 
{ 

NSLog(@"this is loaded"); 
if ([self.window.rootViewController.presentedViewController isKindOfClass:[SecondViewController class]]) 
{ 
    SecondViewController *secondController = (SecondViewController *) self.window.rootViewController.presentedViewController; 

    if (secondController.isPresented) 
    { 
     return UIInterfaceOrientationMaskLandscape; 
    } 
    else return UIInterfaceOrientationMaskPortrait; 
} 
else return UIInterfaceOrientationMaskPortrait; 
} 
+0

Как вы представляете контроллер? –

+0

с использованием метода делегата tableview, выбрал строку с индексом, – iosDev

+0

detailViewController.modalTransitionStyle = UIModalTransitionStyleFlipHorizontal; [self.navigationController pushViewController: detailViewController animated: NO]; – iosDev

ответ

1

self.window.rootViewController.presentedViewController. Я думаю, он возвращает вам класс UINavigationController. Пожалуйста, проверьте внутри журнала или отладки.

UINavigationController* navigationController = (UINavigationController*)self.window.rootViewController.presentedViewController; 

NSArray *arrayVC =navigationController.viewControllers; 
     for (UIViewController* viewController in arrayVC) { 

       //This if condition checks whether the viewController's class is SecondViewController 
       if ([viewController isKindOfClass:[SecondViewController class]]) 
       { 
        //Do something 
       } 

      } 
+0

Да, я получаю UINavigationController – iosDev

+0

Что вы получаете в arrayVC? Дай мне знать. –

+0

Я получаю 4 viewcontrollers – iosDev

1
if([self.window.rootViewController.presentedViewController isKindOfClass:[UINavigationController class]]) { 
    UINavigationController* navigationController = (UINavigationController*)self.window.rootViewController.presentedViewController; 
    if([navigationController.visibleViewController isKindOfClass:[SecondViewController class]]) 
    { 
      SecondViewController *secondController = (SecondViewController *) self.window.rootViewController.presentedViewController; 

      if (secondController.isPresented){ 
        return UIInterfaceOrientationMaskLandscape; 
      } 
      else return UIInterfaceOrientationMaskPortrait; 
    } 
    else return UIInterfaceOrientationMaskPortrait; 
} 

Отредактировано:

[self.navigationController pushViewController:detailViewController animated:NO]; 

Заменить это:

[self.navigationController presentViewController:detailViewController animated:NO completion:nil]; 
+0

По-прежнему получать нуль :( – iosDev

+0

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

+0

@iosDev Пожалуйста, проверьте мой ответ. –

0

Попробуйте вокруг этого кода. здесь вы можете проверить, будет ли он представлен или нажат, а также может проверить ваш конкретный класс.

UIViewController *vcTmp = [[UIViewController alloc]init]; 

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

if([[appDelegate.window.rootViewController presentingViewController] presentedViewController]) 
{ 

    // Now your viewcontroller is presented 

    vcTmp = [[appDelegate.window.rootViewController presentingViewController] presentedViewController]; 

    if ([vcTmp isKindOfClass:[MasterViewController class]]){ 

      // Your class is identified here 

    } 

} 
else 
{ 

    // Now your viewcontroller is pushed 

    vcTmp = [[appDelegate.window.rootViewController presentingViewController] presentedViewController]; 

    NSArray *viewControllers = [appDelegate.window.rootViewController childViewControllers]; 

    vcTmp = (UIViewController*)viewControllers.lastObject; 

    if ([vcTmp isKindOfClass:[MasterViewController class]]){ 

      // Your class is identified here 

    } 

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