仅为某些视图隐藏主UISplitViewController

时间:2012-08-22 12:18:31

标签: xamarin.ios uisplitviewcontroller uisplitviewdelegate

我有一个UISplitViewController,它在master中有一个UINavigationController,在细节中有一个UIViewController。当设备面向横向模式时,我希望保留正常行为。即大师以风景显示并隐藏在肖像中。

但是,取决于用户在主服务器中单击的内容取决于将哪个UIViewController加载到UISplitViewController的详细信息部分中。我希望当用户点击详细信息UIViewController中的按钮时,将主人隐藏在横向模式中。问题是我不能让这个工作。

我的代表看起来像这样(删除了一些行以便更简单地查看):

public class SplitControllerDelegate : UISplitViewControllerDelegate {
                    SplitViewController incomingController;

     private bool hideMaster = false;

     public override bool ShouldHideViewController (UISplitViewController svc,        
                                       UIViewController viewController, 
                                       UIInterfaceOrientation inOrientation) {
          return hideMaster;
     }
     public void SetHideMaster(bool value) {
          hideMaster = value;
     }

}

然后我从详细的UIViewController中调用它,如

   splitControllerDelegate.SetHideMaster(value);

然而没有任何改变。我不确定如何让它执行变更?主人应该立即消失吗?导致WillHideViewController触发的原因是什么?

由于

麦克

2 个答案:

答案 0 :(得分:1)

你要做的事情不能正式完成。只有在设备轮换时才会调用ShouldHideViewController()。因此,除非你前后旋转,否则你的控制器不会消失。

您有多种选择:

  • 请勿使用UIListViewController,而是使用其他第三方替换
  • 使用iOS5的UIViewController包含功能并实现您自己的拆分视图
  • 应用hack到UISplitViewController

关于最后一点。如果将ShouldHideViewController()属性设置为Delegate,然后分配新的委托,则应该能够强制调用NULL。然后,使用当前方向调用拆分视图控制器的WillRotate()方法。

我会选择第二个选项。

答案 1 :(得分:0)

按照设计,您无法使用标准的UISplitView,尝试第三方控件:

https://github.com/mattgemmell/MGSplitViewController