如何在IOS8中隐藏UISplitViewcontroller的masterView

时间:2014-10-06 17:55:17

标签: objective-c ipad ios8 uisplitviewcontroller

全部,

我在IOS8 for iPad中遇到了新的UISplitViewcontroller问题。我在detailViewcontroller的storyboard中有一个UITableView,在单击单元格时,我应该转到另一个名为" detailinfo"的视图。我目前正在使用" show" Segue公司。

然而,目前的segue只是推动了正确的部分。我想它显示全屏,但我不知道如何制作它,我尝试使用splitViewController的preferredDisplayMode属性,结果是它只是隐藏主视图但没有调整detailView的大小。我不想用礼物作为模态。

目前我正在做的是

        - (void)prepareForSegue:(UIStoryboardSegue *)segue sender:(id)sender {
    if([[segue identifier]isEqualToString:@"showStudentDetail"]){

        if(self.traitCollection.horizontalSizeClass != UIUserInterfaceSizeClassCompact){
            UISplitViewController *splitViewController = (UISplitViewController *)self.navigationController.parentViewController;
            splitViewController.preferredDisplayMode = UISplitViewControllerDisplayModePrimaryHidden;
        }

    }
}

并在viewDidAppear中,使用

- (void)viewDidAppear:(BOOL)animated {

    if(self.traitCollection.horizontalSizeClass != UIUserInterfaceSizeClassCompact){
        UISplitViewController *splitViewController = (UISplitViewController *)self.navigationController.parentViewController;
        splitViewController.preferredDisplayMode = UISplitViewControllerDisplayModeAutomatic;
    }
}

这会有效,但是masterViewController会跳出"跳出来"这有很糟糕的视觉效果。 希望可以得到任何帮助,谢谢

1 个答案:

答案 0 :(得分:4)

UISplitViewController是一个复杂的视图控制器,由两个子视图控制器组成。因此,当您使用添加到任何子视图控制器的某个segue时,您要求子视图控制器执行segue。并且这个子视图控制器可以部分控制活动窗口。

在您的情况下,您需要让拆分视图控制器执行segue。因此,您应该将segue添加到处理活动窗口的拆分视图控制器中。这样您就可以使用全屏选项。

<强>更新

如果你不想使用礼物作为模态,并且想避免&#34;跳出&#34;效果你可以使用动画隐藏大师

UISplitViewController *splitViewController = [self splitViewController];
[UIView animateWithDuration:0.25 animations:^{
    splitViewController.preferredDisplayMode = UISplitViewControllerDisplayModePrimaryHidden;
} completion:^(BOOL finished) {
    [splitViewController showDetailViewController:vc sender:nil];
}];