如何将 NavigationController 保持在 subViewController 方向?
Posted
技术标签:
【中文标题】如何将 NavigationController 保持在 subViewController 方向?【英文标题】:How to hold NavigationController in subViewController orientation? 【发布时间】:2011-11-18 13:40:13 【问题描述】:我已经制作了一个 NavigationController 结构。 FirstViewController 是 RootViewController,SecondViewController 是下一个 SubViewController。每个 ViewController shouldAutorotateToInterfaceOrientation 是不同的(参考以下代码)。 FirstViewController 只有纵向可用。 SecondViewController 都支持 Portrait 和 LandscapeMode。
在FirstViewController 中某按钮触摸后,调用pushHandler。下一个 SecondViewController 是推送的。 在将横向旋转回 FirstViewController 后的 SecondViewController 中,该方向太横向了。
但是,我实现的每个 ViewController 方向都不同。但是每个 ViewController 都不能独立设置方向。为什么会发生?
如何才能让viewcontroller每个方向都可以独立设置呢?
如果 SecondViewController 改变了 LandscapeMode 的方向。我想回到FirstViewController 还是portraitMode(永远保持portraitState 不受影响)。 如何以编程方式实现?
FirstViewController *rootViewController = [FirstViewController alloc] init];
UINavigationController *MyNavigationController = [UINavigationController alloc] initWithRootViewController:rootViewController]];
//FirstViewController
- (void)pushHandler
SecondViewController *subViewController = [SecondViewController alloc] init];
[[self navigationController] pushViewController:subViewController animated:YES];
[subViewController release];
- (BOOL)shouldAutorotateToInterfaceOrientation:(UIInterfaceOrientation)interfaceOrientation
return (interfaceOrientation == UIInterfaceOrientationPortrait);
//SecondViewController
- (BOOL)shouldAutorotateToInterfaceOrientation:(UIInterfaceOrientation)interfaceOrientation
return YES;
【问题讨论】:
【参考方案1】:因为您为所有UIViewControllers
使用UINavigationController
,所以您为UINavigationController
设置的任何方向行为都将应用于它的所有children
,或者换句话说,它的堆栈上的对象。
将UINavigationController
视为房子,将UIViewControllers
视为房间。房子里的所有房间都将以与房子相同的方式旋转。如果不转动房屋和其他房间,就无法转动房间。
但总是有技巧。看我对这个问题的回答Only having one view autorotate in xcode?
【讨论】:
我已经尝试过应用类似的代码。我的 NavigationController 结构非常复杂,因为有一个 TabBarController、navigationItem ......您的代码不会更改 navigationItem 和 TabBarController 方向。和 [[NSNotificationCenter defaultCenter] addObserver:self 选择器:@selector(rotate) name:UIDeviceOrientationDidChangeNotification object:nil];此通知始终仅响应 UIDeviceState。不相关的 shouldAutorotateToInterface。 return (interfaceOrientation == UIInterfaceOrientationPortrait);但通知总是响应。所以你的代码不适合我。以上是关于如何将 NavigationController 保持在 subViewController 方向?的主要内容,如果未能解决你的问题,请参考以下文章
如何将 TabBar 添加到基于 NavigationController 的 iPhone 应用程序
如何将新的 UICollectionViewController 推送到单元格单元格内的 navigationController
如何将其他视图控制器推送到 NavigationController 但保留 TabBar?
如何将导航栏(没有 NavigationController)和搜索栏添加到 TableView
如何将 UIBarButtonItem 放在 Swift4 上 NavigationController 的 ViewController 上?