我正在尝试根据用户在我的应用中的位置来定义支持的方向,我很难这样做。
到目前为止,我已经发现我应该使用supportedInterfaceOrientationsForWindow:并且应该在iOS6中支持现在支持的方法,但是在我在UIViewController中定义它们时,都没有调用任何方法。
这是我的代码看起来像
- (BOOL)shouldAutorotate {
return YES;
}
- (NSUInteger)supportedInterfaceOrientationsForWindow {
return UIInterfaceOrientationMaskPortrait;
}
在我的目标摘要支持的Orientatoin中我取消了所有选项..我想我只想在每个m ViewControllers中定义支持的方向......我想知道这是否是正确的事情?
现在我已经阅读了我想要做的事情取决于我的应用程序的结构,所以在这里我将概述我的应用程序。
我希望每个ViewController直到导航控制器堆栈中的最后一个出现在portrate中。 NavigationController中的最后一个视图是一个特殊视图,如果需要,需要能够将其方向向左或向右旋转。
我想知道这是否可行,如果是这样,为什么上面的代码不能正常工作/被调用。
非常感谢任何帮助。
//更新问题Re:
RootView加载(三个按钮,这里是选择按钮加载包含导航控制器的视图时调用的方法)
- (IBAction)buttonClick: (UIButton *) sender
{
//..
// v ----->
if ([sender isEqual:vUIButton]) {
VSearchViewController *vSearchViewController = [[VSearchViewController alloc] initWithNibName:@"VSearchViewController" bundle:nil];
[self.navigationController pushViewController:vehicalSearchViewController animated:YES];
}
//..
}
然后在VSearchViewController内部,我将新视图加载到UINavigation堆栈上,就像这样
//..
FModelsViewController *fModelsViewController = [[FModelsViewController alloc] initWithNibName:@"FModelsViewController" bundle:nil];
// Sets the back button for the new view that loads (this overrides the usual parentview name with "Back")
self.navigationItem.backBarButtonItem = [[UIBarButtonItem alloc] initWithTitle:@"Back" style: UIBarButtonItemStyleBordered target:nil action:nil];
[self.navigationController pushViewController:fModelsViewController animated:YES];
//..
所以在审查中我已经在appDelegate中设置了导航控制器,我的应用程序中的所有视图都在navigationStack上......我错了,说有3个NavigationControllers ..只有一个,每个视图都添加到堆栈..对不起..自从我查看这段代码以来已经过了一年半了。
答案 0 :(得分:1)
您是否在iOS6上运行上述代码?这些方法只能在iOS6上调用。
也许您可以发布一些代码来更好地说明如何转换到这些viewControllers,以便我们可以更好地理解视图层次结构。
您可能希望查看UIViewController的addChildViewController:
方法。
答案 1 :(得分:0)
我认为您的上一个观点可以利用下面编写的代码。它可以感知设备的方向,并为景观视图显示不同的视图控制器(我假设这是你要做的)。这意味着您的上一个视图将具有纵向和横向选项。
@implementation LastViewController
- (void)awakeFromNib
{
isShowingLandscapeView = NO;
[[UIDevice currentDevice] beginGeneratingDeviceOrientationNotifications];
[[NSNotificationCenter defaultCenter] addObserver:self
selector:@selector(orientationLastViewChanged:)
name:UIDeviceOrientationDidChangeNotification
object:nil];
}
- (void)orientationLastViewChanged:(NSNotification *)notification
{
UIDeviceOrientation deviceOrientation = [UIDevice currentDevice].orientation;
if (UIDeviceOrientationIsLandscape(deviceOrientation) &&
!isShowingLandscapeView)
{
[self performSegueWithIdentifier:@"LandscapeLastView" sender:self];
isShowingLandscapeView = YES;
}
else if (UIDeviceOrientationIsPortrait(deviceOrientation) &&
isShowingLandscapeView)
{
[self dismissViewControllerAnimated:YES completion:nil];
isShowingLandscapeView = NO;
}
}
在导致此视图的视图控制器上,您想要锁定为纵向,请编写此代码:
- (BOOL)shouldAutorotate {
return NO;
}
至于您支持的界面方向,请保留您的拥有方式。