[英]UISplitViewController on universal app with Storyboard
我想制作一個在iPad上使用UISplitViewControler
的應用程序(據我所知,它僅適用於iPad)但我希望該應用程序具有通用性。
設置如下:
我有一個UITableView
(作為主視圖),當我選擇一行時,它應該顯示該單元格的詳細視圖。 我正在使用故事板,我無法弄清楚如何僅為iPad實現拆分視圖。
最簡單的方法是什么? 謝謝。
你不需要兩個故事板來做到這一點。你可以在一個故事板中使用它們。對於iphone,我們通常使用類SWRevealViewController (如果你是iOS編碼的新手:)。)用於側面菜單和splitviewcontroller for ipad我們也可以使用SWRevealViewController for ipad。這取決於你的要求。
對於通用應用程序,使用大小類創建viewcontrollers(通常我們使用任何高度任何寬度的通用應用程序)。
更改這些大小類,並根據需要為ipad和iphone創建不同的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.
}
對於ipad加載splitviewcontroller。 和iPhone的swrevealviewcontroller。
這是核心基礎。如果您需要更多信息,請告訴我。
編輯
您是否在故事板中看到了初始VC(viewcontroller)的箭頭標記?此vc在啟動屏幕后首先加載。在我的應用程序中,我有一個主屏幕,這對於iphone和ipad都是常見的(使用上面提到的大小類因此,我可以將此vc設置為初始VC。在這種情況下,我不需要在appdelegate中執行任何操作。但是如果我有一個不同的ipad主屏幕,那么我可以在appdelegate中進行條件檢查didFinishLaunchingWithOptions
您可以像這樣加載First屏幕。您應該通過splitVC tutorilal和swrevealcontroller教程來設置側面菜單。只有在第一個屏幕包含側邊菜單時才應加載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];
}
代碼可能看起來很冗長,但要簡單一點。如果你做的話,你只能理解邏輯。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.