我想创建一个这样的应用程序:
在iphone(包括肖像和风景)和ipad肖像上,我有一个桌面视图屏幕,点击项目行将导航到另一个细节屏幕看起来像其他基本应用程序。
但是当我在ipad上旋转屏幕转到横向时,屏幕现在有两个剖面视图
这是我做的:
isInLandscapeTablet
以检测ipad格局UINavigationController
作为根控制器来控制所有其他观看次数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];
}
}
答案 0 :(得分:2)
了解设备后是iPad还是iPhone。您可以尝试删除Root View Controller。
appDelegate.window.rootViewController = nil;
然后使用新的SplitViewController
设置根视图控制器 id objClass =[[SplitViewController alloc]initWithNibName:@"SplitViewController" bundle:nil];
masterVC.delegate = detailVC;
detailVC.delegate = objClass;
[objClass setViewControllers:@[masterNavigate,detailNavigate]];
[appDelegate.window setRootViewController:objClass];
答案 1 :(得分:1)
如果您在iOS 8上进行开发,则应使用Size Classes,这样您就可以完全根据iPhone / iPad纵向和iPad横向更改布局。不幸的是,在iOS 7上,尺寸等级仅区分iPhone和iPad。
在这两种情况下,右侧部分(2)都可以使用containerView轻松处理。
答案 2 :(得分:1)
我的建议是根本不使用Split View Controller。创建一个自定义视图控制器,它将嵌入您的表视图控制器和第二个控制器。此外,您可以在您创建的自定义控制器中实现接口 - 旋转逻辑。
答案 3 :(得分:1)
- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions
{
MyFirstViewController* firstVC = [[MyFirstViewController alloc] init];
MySecondViewController* secondVC = [[MySecondViewController alloc] init];
if ( ([[UIDevice currentDevice] orientation] == UIDeviceOrientationPortrait) ){
UISplitViewController* splitVC = [[UISplitViewController alloc] init];
splitVC.viewControllers = [NSArray arrayWithObjects:firstVC, secondVC, nil];
window = [[UIWindow alloc] initWithFrame:[[UIScreen mainScreen] bounds]];
window.rootViewController = splitVC;
[window makeKeyAndVisible];
}
else
{
// Display tableview
}
return YES;
}
我认为这可能对你有帮助..