3

我有一个 UISplitViewController,它在 master 中有一个 UINavigationController,在 detail 中有一个 UIViewController。当设备定向为横向模式时,我希望保留正常行为。即大师以横向显示并以纵向隐藏。

但是,取决于用户在主控中单击的内容,取决于将哪个 UIViewController 加载到 UISplitViewController 的详细信息部分。我想要的是当用户单击详细 UIViewController 中的按钮时,master 以横向模式隐藏。问题是我无法让它工作。

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

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 触发?

谢谢

麦克风

4

2 回答 2

2

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

您有多种选择:

  • 不要使用UIListViewController其他第三方替代品
  • 使用 iOS5 的 UIViewController 包含特性,实现自己的拆分视图
  • 应用 hack 到UISplitViewController

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

我会选择第二个选项。

于 2012-08-23T06:59:25.583 回答
0

按照设计,您不能对标准 UISplitView 做太多事情,请尝试使用第三方控件:

https://github.com/mattgemmell/MGSplitViewController

于 2012-08-23T13:21:38.693 回答