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