更正后@PushpakNarasimhan我使用UINavigationController
的子类来支持我的应用程序中的方向,下面给出了navigationController
子类的代码
- (BOOL)shouldAutorotate
{
return self.topViewController.shouldAutorotate;
}
- (NSUInteger)supportedInterfaceOrientations
{
NSLog(@"top vc = %@",self.topViewController);
return self.topViewController.supportedInterfaceOrientations;
}
- (UIInterfaceOrientation)preferredInterfaceOrientationForPresentation
{
return [self.topViewController preferredInterfaceOrientationForPresentation];
}
使用此代码,我从ViewController A
导航到ViewController B
,从ViewController B
导航到ViewController C
,当我到达ViewController C
时,我需要导航到{ {1}}但是当我在导航堆栈中推送ViewController D
时,我发现ViewController D
中没有调用方向方法,但是其他ViewController D
的情况并非如此。
给出的是我所有ViewControllers
中包含view controllers
viewController D
这是我在所有视图控制器中使用的代码,但奇怪的是当它到达视图控制器D时没有调用方向方法,我也检查了导航视图控制器数组,在那里我发现了视图控制器D正在添加到导航堆栈中,但是方向代码没有被执行。
还有一件事我注意到在视图控制器D中我在导航子类中使用的NSLog没有被执行,而在所有其他导航控制器中它被执行。
请帮我解决这里可能存在的问题 谢谢
编辑1:我发现当我尝试从- (BOOL) shouldAutorotate
{
return NO;
}
-(NSUInteger)supportedInterfaceOrientations
{
NSLog(@"Finally method is called");
if ([[[PlistHandler sharedInstance] readvalueforKey:DEVICE_ORIENTATION fromPlistwithName:kSettings] isEqualToString:DEVICE_ORIENTATION_LANDSCAPE]
|| [[[PlistHandler sharedInstance] readvalueforKey:DEVICE_ORIENTATION fromPlistwithName:kSettings] isEqualToString:BLANK_STRING])
{
return UIInterfaceOrientationMaskLandscape;
}
else
{
return UIInterfaceOrientationMaskPortrait;
}
return UIInterfaceOrientationMaskPortrait;
}
推送ViewController D
时,定向方法会被调用,但是当我从{{1}开始调用时当我按ViewController B
时,它有一个表视图和ViewController C
方法,那么在这种情况下,它的方向方法不会被执行,非常奇怪。