簡體   English   中英

帶有Storyboard的通用應用程序上的UISplitViewController

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM