2012-08-08 59 views
1

注意: 在阅读本问题之前,请注意,我已阅读前面的问题,解释有关苹果执行UISplitViewController的不足之处以及我应该如何使用开放源代码的“MGSplitViewController”,因为在横向模式下将主视图控制器隐藏在分割视图控制器上并不太容易。请记住,我仅限于在iOS 5.1中使用正常的UISplitViewController。UISplitViewController不会在横向模式下隐藏masterViewController

现在到这样的问题:

我有左侧(主视图)表视图拆分视图控制器和右侧的详细视图控制器。我使用导航控制器来控制左侧,这是一个转换到另一个表视图(“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:

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

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

+0

真的希望能得到这个答案... – Bitwise 2012-08-08 03:18:50

回答

1

下面是我如何处理它。如果MasterViewController在返回时没有实例化,可能需要更多工作才能使MasterViewController重新出现。

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

不适用于我在iOS7上。 – Norbert 2013-09-25 08:28:34

相关问题