【发布时间】:2014-08-21 10:56:45
【问题描述】:
我在对前一个视图控制器执行展开转场时遇到问题,同时保留前一个视图控制器的首选方向。我已经在 tabbarcontroller、navcontroller 和各种视图控制器中实现了类别来覆盖旋转方法,除了这个问题之外,这些控制器还维护受支持的视图。
我在模态视图控制器上创建了一个按钮,可以展开到前一个控制器。当我在横向状态下按下此按钮时,它会展开到上一个,但在横向状态下,尽管视图控制器的首选/支持的方向是纵向的。
我想执行此展开转场,但不允许它以横向显示控制器(转场回到纵向)。我附上了一段简短的视频来展示我的问题。
https://www.dropbox.com/s/a5epj9tpmk85cnv/segueproblem.mov
TabBarController.m
@implementation UITabBarController (autoRotate)
- (BOOL)shouldAutorotate {
return [self.selectedViewController shouldAutorotate];
}
- (NSUInteger)supportedInterfaceOrientations {
return [self.selectedViewController supportedInterfaceOrientations];
}
NavController.m
@implementation UINavigationController (autoRotate)
- (BOOL)shouldAutorotate {
return [self.visibleViewController shouldAutorotate];
}
- (NSUInteger)supportedInterfaceOrientations {
return [self.visibleViewController supportedInterfaceOrientations];
}
BViewController.m
@implementation BViewController
- (BOOL)shouldAutorotate {
return NO;
}
- (NSUInteger)supportedInterfaceOrientations {
return UIInterfaceOrientationMaskPortrait;
}
- (UIInterfaceOrientation)preferredInterfaceOrientationForPresentation {
return UIInterfaceOrientationPortrait;
}
- (IBAction)unwindToViewControllerNameHere:(UIStoryboardSegue *)segue {
}
CViewController.m
@implementation CViewController
- (BOOL)shouldAutorotate {
return YES;
}
- (NSUInteger)supportedInterfaceOrientations {
return UIInterfaceOrientationMaskAll;
}
- (IBAction)backbutton:(id)sender {
}
【问题讨论】:
-
尝试向您的
supportedInterfaceOrientations添加一些日志记录或断点,并查看解雇时发生的情况。是否正在征求他们的意见?他们是否返回了您希望他们返回的答案? -
顺便说一句,在 iOS 8 this isn't going to work at all 中,似乎,所以您可能想开始摆脱整个模型。
-
嗨,马特,感谢您的回复,您建议实施哪些方法来为 iOS 8 做准备?我只是想将整个项目中的两个视图控制器强制为所有方向,并将其余部分限制为 tabcontroller>navcontrollers 中的纵向
-
哎呀,您的链接是超级伪装的,我第一次没有发现它,似乎在 iOS 8 中,您将无法根据您的 cmets 将单个视图控制器限制为特定方向关联。不幸的是,我只是试图从我们的网络服务器显示地图并允许用户偏好方向。以前的视图控制器(drilldown tableviews)在横向上确实没有业务。回到绘图板。有什么专业提示吗?
-
在 iOS 8 中,您似乎应该具有适应性。毕竟,没有理由不能横向显示表格视图。
标签: ios objective-c uiviewcontroller uitabbarcontroller uistoryboardsegue