带有故事板的通用应用程序上的 UISplitViewController
UISplitViewController on universal app with Storyboard
我想制作一个在 iPad 上使用 UISplitViewControler
的应用程序(据我所知,它仅在 iPad 上可用)但我想要该应用程序通用。
设置是这样的:
我有一个 UITableView
(作为主视图),当我 select 一行时,它应该显示该单元格的详细视图。我正在使用情节提要,但我无法弄清楚如何仅为 iPad.
实现拆分视图
实现该目标的最简单方法是什么?谢谢
你不需要两个故事板来做 this.You 可以在一个 storyboard.For iphone 中同时使用它们,我们通常使用 class SWRevealViewController(如果您是 iOS 编码的新手 ..:))用于侧边菜单和拆分 viewcontroller 用于 ipad.We 也可以使用 SWRevealViewController 用于 ipad 作为 well.It取决于您的要求。
对于通用应用程序,使用 size Classes 创建 viewcontrollers(通常我们对通用应用程序使用任意高度任意宽度)。
更改这些尺寸 classes 并根据需要为 ipad 和 iphones 创建不同的 viewcontrollers。在大多数情况下任何高度任何宽度就可以了。
创建 viewcontrollers 后,在 appdelegate 中,使用 instantiateViewcontrollerWithIdentifier
方法,加载所需的 viewcontroller.
if (UI_USER_INTERFACE_IDIOM() == UIUserInterfaceIdiomPad) {
// The device is an iPad running ios 3.2 or later.
}
else {
// The device is an iPhone or iPod touch.
}
For ipad 加载 splitviewcontroller. 和 swrevealviewcontroller for iPhone.
这是核心basics.If您需要更多信息,请告诉我。
EDIT
你有没有看到故事板中初始 VC(viewcontroller) 的箭头标记?这个 vc 在启动后首先加载 screen.In 我的应用程序,我有一个 iphone 和 ipad 通用的主屏幕(如上所述使用大小 classes)。所以我可以将这个 vc 设置为初始 VC.In 这种情况下,如果 ipad 有不同的主屏幕,我不必在 appdelegate.But 中做任何事情,然后我可以在 appdelegate didFinishLaunchingWithOptions
[= 中进行条件检查17=]
您可以像这样加载第一个屏幕 this.You 应该按照 splitVC 教程和 swrevealcontroller 教程来设置侧面 menu.You 应该加载 SWrevealVC 或 splitViewcontroller仅当第一个屏幕包含侧边菜单时。
- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions
{
if ([[UIDevice currentDevice] userInterfaceIdiom] == UIUserInterfaceIdiomPad)
{
UIStoryboard *storyboard = [UIStoryboard storyboardWithName:@"Main" bundle:nil];
UISplitViewController *split = [storyboard instantiateViewControllerWithIdentifier:@"SplitViewController"];
[AppDelegate setRootController:split storyboard:storyboard actiontype:0];
}
else if(UI_USER_INTERFACE_IDIOM() == UIUserInterfaceIdiomPhone)
{
UIStoryboard *storyboard = [UIStoryboard storyboardWithName:@"Main" bundle:nil];
UIViewController *split = [storyboard instantiateViewControllerWithIdentifier:@"SWrevealVC"];
[AppDelegate setRootController:split storyboard:storyboard actiontype:-1];
}
return YES;
}
+(void)setRootController:(UIViewController*)controller
storyboard:(UIStoryboard*)storyboard actiontype:(int) actiontype;
{
if ( UI_USER_INTERFACE_IDIOM() == UIUserInterfaceIdiomPad && actiontype == 0)
{
UISplitViewController *splitViewController = (UISplitViewController *)controller;
//splitViewController.presentsWithGesture = false;
UINavigationController *masterNavigationController = [splitViewController.viewControllers objectAtIndex:0];
SideMenuViewController *controller = (SideMenuViewController *)masterNavigationController.topViewController;
controller.splitViewController = splitViewController;
splitViewController.delegate = (id)controller;
}
AppDelegate *appDelegate = (AppDelegate *)[[UIApplication sharedApplication] delegate];
[UIView
transitionWithView:appDelegate.window
duration:0.5
options:UIViewAnimationOptionAllowAnimatedContent
animations:^(void) {
BOOL oldState = [UIView areAnimationsEnabled];
[UIView setAnimationsEnabled:NO];
appDelegate.window.rootViewController = controller;
[UIView setAnimationsEnabled:oldState];
}
completion:nil];
}
代码可能看起来很长,但是接受simple.You只有自己动手才能理解其中的逻辑
我想制作一个在 iPad 上使用 UISplitViewControler
的应用程序(据我所知,它仅在 iPad 上可用)但我想要该应用程序通用。
设置是这样的:
我有一个 UITableView
(作为主视图),当我 select 一行时,它应该显示该单元格的详细视图。我正在使用情节提要,但我无法弄清楚如何仅为 iPad.
实现该目标的最简单方法是什么?谢谢
你不需要两个故事板来做 this.You 可以在一个 storyboard.For iphone 中同时使用它们,我们通常使用 class SWRevealViewController(如果您是 iOS 编码的新手 ..:))用于侧边菜单和拆分 viewcontroller 用于 ipad.We 也可以使用 SWRevealViewController 用于 ipad 作为 well.It取决于您的要求。
对于通用应用程序,使用 size Classes 创建 viewcontrollers(通常我们对通用应用程序使用任意高度任意宽度)。
更改这些尺寸 classes 并根据需要为 ipad 和 iphones 创建不同的 viewcontrollers。在大多数情况下任何高度任何宽度就可以了。
创建 viewcontrollers 后,在 appdelegate 中,使用 instantiateViewcontrollerWithIdentifier
方法,加载所需的 viewcontroller.
if (UI_USER_INTERFACE_IDIOM() == UIUserInterfaceIdiomPad) {
// The device is an iPad running ios 3.2 or later.
}
else {
// The device is an iPhone or iPod touch.
}
For ipad 加载 splitviewcontroller. 和 swrevealviewcontroller for iPhone.
这是核心basics.If您需要更多信息,请告诉我。
EDIT
你有没有看到故事板中初始 VC(viewcontroller) 的箭头标记?这个 vc 在启动后首先加载 screen.In 我的应用程序,我有一个 iphone 和 ipad 通用的主屏幕(如上所述使用大小 classes)。所以我可以将这个 vc 设置为初始 VC.In 这种情况下,如果 ipad 有不同的主屏幕,我不必在 appdelegate.But 中做任何事情,然后我可以在 appdelegate didFinishLaunchingWithOptions
[= 中进行条件检查17=]
您可以像这样加载第一个屏幕 this.You 应该按照 splitVC 教程和 swrevealcontroller 教程来设置侧面 menu.You 应该加载 SWrevealVC 或 splitViewcontroller仅当第一个屏幕包含侧边菜单时。
- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions
{
if ([[UIDevice currentDevice] userInterfaceIdiom] == UIUserInterfaceIdiomPad)
{
UIStoryboard *storyboard = [UIStoryboard storyboardWithName:@"Main" bundle:nil];
UISplitViewController *split = [storyboard instantiateViewControllerWithIdentifier:@"SplitViewController"];
[AppDelegate setRootController:split storyboard:storyboard actiontype:0];
}
else if(UI_USER_INTERFACE_IDIOM() == UIUserInterfaceIdiomPhone)
{
UIStoryboard *storyboard = [UIStoryboard storyboardWithName:@"Main" bundle:nil];
UIViewController *split = [storyboard instantiateViewControllerWithIdentifier:@"SWrevealVC"];
[AppDelegate setRootController:split storyboard:storyboard actiontype:-1];
}
return YES;
}
+(void)setRootController:(UIViewController*)controller
storyboard:(UIStoryboard*)storyboard actiontype:(int) actiontype;
{
if ( UI_USER_INTERFACE_IDIOM() == UIUserInterfaceIdiomPad && actiontype == 0)
{
UISplitViewController *splitViewController = (UISplitViewController *)controller;
//splitViewController.presentsWithGesture = false;
UINavigationController *masterNavigationController = [splitViewController.viewControllers objectAtIndex:0];
SideMenuViewController *controller = (SideMenuViewController *)masterNavigationController.topViewController;
controller.splitViewController = splitViewController;
splitViewController.delegate = (id)controller;
}
AppDelegate *appDelegate = (AppDelegate *)[[UIApplication sharedApplication] delegate];
[UIView
transitionWithView:appDelegate.window
duration:0.5
options:UIViewAnimationOptionAllowAnimatedContent
animations:^(void) {
BOOL oldState = [UIView areAnimationsEnabled];
[UIView setAnimationsEnabled:NO];
appDelegate.window.rootViewController = controller;
[UIView setAnimationsEnabled:oldState];
}
completion:nil];
}
代码可能看起来很长,但是接受simple.You只有自己动手才能理解其中的逻辑