簡體   English   中英

如何在ladscape和縱向方向上隱藏MasterView UISplitViewController iOS7.1

[英]how to hide MasterView on ladscape and portrait orientations UISplitViewController iOS7.1

我正在iOS上開發一個顯示UISplitViewController的應用程序。 在縱向模式下,顯示一個用於顯示/隱藏主視圖控制器(MenuPrincipalVC)的按鈕,如下所示:

在此處輸入圖片說明在此處輸入圖片說明

但是,當我旋轉視圖控制器時,無論菜單是否在縱向視圖上隱藏,它始終可見

在此處輸入圖片說明

我想要兩個方向(橫向和縱向)上的主視圖具有相同的行為,我希望隱藏主視圖(MenuPrincipalVC),並在頂部顯示一個按鈕以顯示/隱藏主視圖控制器,這是我的代碼:

這是為了創建SplitView並顯示它,masterViewController始終是MenuPrincipalVC,但是detailView取決於rightViewController:

#pragma mark *** UISplitViewController methods ***
-(void)showSplitViewControllerInView:(UIView *)view
            withDetailViewController:(id)rightViewController{

    UIStoryboard *mainStoryboard        = [UIStoryboard storyboardWithName:@"iPad" bundle: nil];

    UINavigationController  *leftNavController;
    UINavigationController  *rightNavController;

    MenuPrincipalVC  *leftViewController     = [mainStoryboard instantiateViewControllerWithIdentifier:@"MenuPrincipalVC"];
    leftViewController.title            = @" ";


    leftNavController                   = [[UINavigationController alloc] initWithRootViewController:leftViewController];
    rightNavController                  = [[UINavigationController alloc] initWithRootViewController:rightViewController];

    leftNavController.toolbarHidden                 = FALSE;
    rightNavController.toolbarHidden                = FALSE;
    leftNavController.navigationBar.translucent     = TRUE;
    rightNavController.navigationBar.translucent    = TRUE;
    leftNavController.toolbar.translucent           = FALSE;
    rightNavController.toolbar.translucent          = TRUE;

    UISplitViewController   *splitViewController    = [[UISplitViewController alloc] init];
    splitViewController.viewControllers             = [NSArray arrayWithObjects:leftNavController, rightNavController, nil];
    splitViewController.delegate                    = rightViewController;

    if ([splitViewController respondsToSelector:@selector(setPresentsWithGesture:)]) {
        [splitViewController setPresentsWithGesture:NO];
    }

    view.window.rootViewController      = splitViewController;
}
#pragma -

在我的rightViewController上,我設置了以下方法:

#pragma mark - UISplitViewDelegate methods
-(void)splitViewController:(UISplitViewController *)svc
    willHideViewController:(UIViewController *)aViewController
         withBarButtonItem:(UIBarButtonItem *)barButtonItem
      forPopoverController:(UIPopoverController *)pc{

    //Grab a reference to the popover
    self.popover                    = pc;

    barButtonItem.title             = [NSString fontAwesomeIconStringForEnum:FABars];
    NSDictionary *textAttributes    = @{NSFontAttributeName : [UIFont fontWithName:kFontAwesomeFamilyName
                                                                              size:TOOLBAR_ICONS_SIZE],
                                        NSForegroundColorAttributeName : [UIColor whiteColor]};
    [barButtonItem setTitleTextAttributes:textAttributes forState:UIControlStateNormal];


    UINavigationItem *navItem       = self.navigationItem;
    [navItem setLeftBarButtonItem:barButtonItem animated:YES];
}

-(void)splitViewController:(UISplitViewController *)svc
    willShowViewController:(UIViewController *)aViewController
 invalidatingBarButtonItem:(UIBarButtonItem *)barButtonItem{


    //Remove the barButtonItem.
    [_navBarItem setLeftBarButtonItem:nil animated:YES];

    //Nil out the pointer to the popover.
    _popover = nil;

}
#pragma mark -

感謝您的支持

我要做的就是將下一行代碼添加到我的詳細視圖控制器中:

-(BOOL)splitViewController:(UISplitViewController *)svc shouldHideViewController:(UIViewController *)vc inOrientation:(UIInterfaceOrientation)orientation{
    return YES;
}

另一個解決方案可能是簡單地專門設置主視圖控制器的寬度(當然,演示控制器可以始終替換奇怪的行為和難以使用的拆分視圖方法)。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

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