3

マスターに UINavigationController があり、詳細に UIViewController がある UISplitViewController があります。デバイスが横向きモードになっている場合、通常の動作を維持したいと考えています。つまり、マスターは横向きで表示され、縦向きでは隠されます。

ただし、ユーザーがマスターで何をクリックするかによって、どの 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 が起動する原因は何ですか?

ありがとう

マイク

4

2 に答える 2

2

あなたがやろうとしていることは、公式に行うことはできません。ShouldHideViewController()デバイスの回転時にのみ呼び出されます。したがって、前後に回転しない限り、コントローラーは消えません。

さまざまなオプションがあります。

  • 使用しないUIListViewControllerが、他のサードパーティの代替品
  • iOS5 の UIViewController コンテインメント機能を使用して、独自の分割ビューを実装する
  • ハックを適用するUISplitViewController

最後のポイントについて。プロパティをに設定してから新しいデリゲートを割り当てると、強制的ShouldHideViewController()に呼び出されるようになるはずです。その後、現在の向きを使用して分割ビュー コントローラーのメソッドを呼び出します。DelegateNULLWillRotate()

私は2番目のオプションに行きます。

于 2012-08-23T06:59:25.583 に答える
0

設計上、標準の UISplitView では多くのことを行うことができません。サード パーティ製のコントロールを試してください。

https://github.com/mattgemmell/MGSplitViewController

于 2012-08-23T13:21:38.693 に答える