UISplitViewController不会在横向模式下隐藏masterViewController

问题描述 投票:1回答:1

注意:在阅读此问题之前,请注意,我已经阅读了前面的问题,这些问题解释了有关Apple的UISplitViewController实现以及我应该如何使用开源的“ MGSplitViewController”的缺陷,因为将主视图控制器简单隐藏在屏幕上并不容易横向模式下的拆分视图控制器。 请记住,我仅限于在iOS 5.1中使用普通的UISplitViewController。

现在进入问题:

我有一个拆分视图控制器,左侧是表视图(主视图),右侧是明细视图控制器。 我正在使用导航控制器来控制左侧,该左侧是一个转换为另一个表格视图(“ DataTableViewController”)的表格视图。 为了隐藏此左侧,我在局部视图控制器的导航工具栏上放置了一个“隐藏”按钮。 当按下隐藏按钮时,我将更改“ _hideMaster”属性:

-(IBAction)hidePressed
{
    _hideMaster = !_hideMaster;
    // Must manually reset the delegate back to self in order to force call "shouldHideViewController"
    self.splitViewController.delegate = nil;
    self.spliteViewController.delegate = self;

}

然后自动在SplitViewController委托中调用此方法:

// This is called when I change the delegate from nil back to self.
- (BOOL)splitViewController: (UISplitViewController*)svc shouldHideViewController: (UIViewController *)vc inOrientation:(UIInterfaceOrientation)orientation 
{
    return _hideMaster;
}

当我调试它时,我可以看到一切都按计划进行,并且当属性进入方法splitViewController:shouldHideViewController:inOrientation:时,该属性具有正确的值splitViewController:shouldHideViewController:inOrientation:

唯一的问题是什么也没发生。 我最左边的表视图( DataTableViewController )不会消失。 当我仔细观察时,委托方法中的(UIViewController *)vc参数不是我要隐藏的表视图控制器,而是与此表视图关联的导航控制器。 所以从本质上讲,它正在试图隐藏导航控制器-显然这不是我想要的...

如何使自动调用的委托方法( shouldHideViewController:中的UIViewController参数调用与该导航控制器关联的最顶层视图控制器? (毕竟,我想隐藏DataTableViewController

ios hide uisplitviewcontroller
1个回答
1
投票

这是我的处理方式。 如果未在返回的途中实例化MasterViewController,可能需要做更多工作才能使其重新出现。

[UIView beginAnimations:nil context:NULL];
[UIView setAnimationDuration:0.30f];
[[self.splitViewController.viewControllers lastObject] view].frame = self.splitViewController.view.frame;
[UIView commitAnimations];
© www.soinside.com 2019 - 2024. All rights reserved.