UISplitViewController不以横向模式隐藏masterViewController

时间:2012-08-08 01:06:38

标签: ios hide uisplitviewcontroller

注意:    在阅读这个问题之前,请注意我已经阅读了以前的问题,这些问题解释了苹果实施UISplitViewController的不足之处以及我应该如何使用开源的" MGSplitViewController"因为在横向模式下简单地隐藏分割视图控制器上的主视图控制器并不容易。请记住,我只能在iOS 5.1中使用普通的UISplitViewController。

现在问题:

我有一个拆分视图控制器,左侧是表视图(主视图),右侧是详细视图控制器。我使用导航控制器来控制左侧,这是一个转换到另一个表视图的表视图(" DataTableViewController")。为了隐藏这个左侧,我已经放置了一个" hide"详细视图控制器的导航工具栏上的按钮。当按下隐藏按钮时,我改变了我的" _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:时具有正确的值

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

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

1 个答案:

答案 0 :(得分:1)

这是我如何处理它。如果在回来的路上没有实例化MasterViewController,可能还需要做更多工作才能重新出现。

[UIView beginAnimations:nil context:NULL];
[UIView setAnimationDuration:0.30f];
[[self.splitViewController.viewControllers lastObject] view].frame = self.splitViewController.view.frame;
[UIView commitAnimations];