【发布时间】:2015-02-16 02:35:09
【问题描述】:
我想创建一个这样的应用程序:
在 iphone(纵向和横向)和 ipad 纵向上,我有一个表格视图屏幕,点击项目行将导航到另一个细节屏幕,看起来像其他基本应用程序。
但是当我在 ipad 上旋转屏幕转到横向时,屏幕现在有两个剖面视图
这是我所做的:
- 写一个方法
isInLandscapeTablet检测ipad横屏 - 使用
UINavigationController作为根控制器来控制所有其他视图 - 在纵向屏幕中,将包含 tableview 的视图控制器推送到根控制器
- 在平板横屏中,将tableview控制器和detail控制器附加到
UISplitViewController,然后将其推送到根控制器中
但问题是我无法将 UISplitViewController 推送到根控制器,因为它需要成为根控制器。
我想知道我该如何处理这个问题
我的方法正确吗?有没有其他办法?
更新:我像这样更改根视图控制器
// this snippet is in UINavigationController (I use as root viewcontroller)
if([self isInTabletLandscape]){
self.splitViewController.viewControllers = [NSArray arrayWithObjects:[[CategoryViewController alloc] initWithNibName:@"CategoryViewController" bundle:nil], self.propertyLandViewController, nil];
[[UIApplication sharedApplication].keyWindow setRootViewController:self.splitViewController];
}else{
// it doesn't work
[[UIApplication sharedApplication].keyWindow setRootViewController:self];
}
}
【问题讨论】:
-
您应该有三个不同的 viewController - 1 个用于 iPhone 纵向,1 个用于 iPad 纵向,1 个用于 iPad 横向(带有 splitViewController)。根据设备类型和方向将正确的 viewcontroller 推送到 rootViewCcontroller。如果用户旋转 iPad,弹出到 rootViewControler 并再次推送正确的 viewController。您可以在 rootViewContoller 中使用委托设置一个标志,以告知要推送哪个 viewContoller。
-
@Kilogen9 这就是我所做的。但正如我所说,问题是我无法将 UISplitViewController 推送到根控制器,因为它需要成为根控制器。
-
@R4j 菜单应该是静态的还是总是横向显示?
-
@NorthBlast 这不是一个真正的菜单。视图 1 始终显示在 ipad 横向的左侧。
标签: ios objective-c ipad screen-orientation