0

JASidePanel を使用して Facebook のようなサイド メニューを表示するアプリがあります。うまく機能しており、左右のパネルを表示できます。しかし、左パネルと右パネルを汎用にする必要があります。つまり、現在のセンター パネル ビュー コントローラーから新しいビュー コントローラー (詳細ビュー コントローラーなど) に切り替える場合でも、左パネルと右パネルを表示できる必要があります。

MainVC と DetailVC を使用したこのシナリオを検討してください。

シーン 1:

[left]-[center]-[right]
          |
       [MainVC]

シーン 2: 次のビュー コントローラーに移動するとき

       [MainVC]

[left]-[center]-[right]
          |
      [DetailVC]

シーン 3: 別のビュー コントローラーに移動したとき

       [MainVC]
      [DetailVC]

[left]-[center]-[right]
          |
    [MoreDetailVC]

DetailVC がプッシュされ、中央パネルの「上に配置」されますが、MainVC はまだスタックのどこかに存在します。私はセグエとプッシュが必要です

  1. ストーリーボードを使用しています
  2. 他のビュー コントローラーでは、popToRootViewController を呼び出します。MainVC を rootViewController にする必要があります。

MainVC から DetailVC へのセグエを実行してみました

[self performSegueWithIdentifier...];

DetailVC で、センター パネルを次のように自分自身に設定します。

//in view will appear
sidePanelViewController.centerPanel = self;

これにより、アプリの黒い画面が生成されます。これは、センター パネルのセッター メソッドもビュー コントローラーを読み込みますが、ビューは既に読み込まれているため、セグエが 2 倍になるためだと思います。上記の行を削除すると、detailVC は正常に表示されますが、左右のパネルにアクセスできません。

thisthis、および thisを見てきましたが、回答はありません。JASidePanel ではこれができないのではないかと考えており、他のリソースの使用を検討しています。

編集: MainVC でセグエを実行する代わりに、中央のパネルを次のように直接設定してみました:

sidePanelViewController.centerPanel = [self.storyboard instantiateVCWithIdentifier:@"detailVC"];

そしてそれは機能し、セグエ経由ではなく DetailVC に移動するため、アニメーションはありませんが、左右のパネルにアクセスできます。問題は、popToRootViewController を使用して mainVC に戻れないことです。(ホームボタンのように多くの遷移がある可能性があるため、 popToRootViewController を使用してすぐにmainVCに戻る必要があります)

4

1 に答える 1

4

次の中央のView Controllerへのセグエを実行する代わりに、すべてのセグエを削除して使用しました:

sidePanelViewController.centerPanel = 
    [self.storyboard instantiateVCWithIdentifier:@"detailVC"];

これは中央のパネルを変更しますが、プッシュ アニメーションがないので、ちょっと悲しいです。次に、メイン ビュー コントローラーのポインターをアクセス可能なグローバルのどこかに保存しました。たとえば、App Delegate としましょう。次に、ホームボタンを押すと、次のようにホームに戻ります。

sidePanelViewController.centerPanel = appDelegate.mainViewControllerPointer;

これにより、メインのView Controllerを離れた状態に戻ります。[self.storyboard instantiate...] を使用して新しいビュー コントローラーをインスタンス化すると、メイン ビュー コントローラーがセンター パネルとして配置され、フォーム データが残っていません。

于 2013-10-21T06:13:09.917 に答える