self.window.rootViewController.presentedViewController, возвращающий ноль

self.window.rootViewController.presentedViewController

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

Ниже приведен полный код

- (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;
}

3 ответа

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
                }

          }
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];

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

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

    }

}
Другие вопросы по тегам