2016-04-25 6 views
3

preferredDisplayMode = .AllVisibleを持つUISplitViewControllerがあります。 Hereは、どのように私のストーリーボードを設定したのですか?詳細ビューコントローラがすでにUINavigationControllerに埋め込まれていることに注意してください。Detail View Controllerが常にUINavigationControllerに組み込まれていることを確認するにはどうすればよいですか?

特定のボタンがマスタービューコントローラのtoolBarにタップされたとき、私は次のメソッドを実行します。

@IBAction func entertainmentBarButtonItemTapped(sender: AnyObject) {  
     self.showDetailViewController(self.storyboard!.instantiateViewControllerWithIdentifier("SearchViewController") as! SearchViewController, sender: sender) 
} 

を今、これはポートレートモードでは、iPhone上で正常に動作しますが、iPhone 6の風景モードで+、詳細表示コントローラー(今説明したもの)にはnavigationBarが表示されません。これは私が望む行動ではありません。デフォルトのDetail View ControllerはUINavigationControllerに埋め込まれているので、想像するとnavigationBarが突然見つからないと矛盾するように見えます。

@IBAction func entertainmentBarButtonItemTapped(sender: AnyObject) {  
     self.showDetailViewController(self.storyboard!.instantiateViewControllerWithIdentifier("NavigationSearchViewController") as! NavigationSearchViewController, sender: sender) 
} 

は、今私は前と同じVCと私の詳細ビューコントローラを交換していますが、それは代わりにUINavigationControllerに埋め込まれている:

それでは私の代わりに、以下を試してみてください。この動作は、navigationBarが表示されるため、ランドスケープモードでは6+で期待通りに動作します。

しかし、ポートレイトモードでは、新しいVCがスタックにプッシュされるため、元のDetail View ControllerでtoolBarが表示されなくなり、何かが正しく行かなかった。

showDetailViewController(..)を正しく使用すると、UINavigationControllerには常に詳細ビューコントローラが組み込まれていますが、奇妙な遷移はありません。私は、これは私にUISplitViewControllerデリゲートを変更する必要があると思うが、私は 'UINavigationControllerをスタックすることはできません。エラー。

編集:私は修正 のみデリゲート:

func splitViewController(splitViewController: UISplitViewController, collapseSecondaryViewController secondaryViewController: UIViewController, ontoPrimaryViewController primaryViewController: UIViewController) -> Bool { 
     //Since splitViewController!.showViewController changes secondaryViewController to no longer be a UINavigationController, this must first be checked for there to even be a BlankVC. 
     if let secondaryNavController = secondaryViewController as? UINavigationController { 
      if ((secondaryNavController.topViewController) != nil) { 
        return true 
      } 
      return false 
    } 

私は現在、同じ動作を参照してください。

答えて

0

はい、デリゲートを実装:separateSecondaryViewControllerFromPrimaryViewController:あなたは表示されませんでした

- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions 
{ 
    self.splitViewController.delegate = self; 
    ... 
} 

#pragma mark - UISplitViewControllerDelegate 

/* On iPhone 6 Plus: 
     Portrait: This method is called and YES is returned. 
     Landscape: This method is not called. 
    On iPad Air 
     Portrait: This method is not called. 
     Landscape: This method is not called. 
*/ 

- (BOOL)  splitViewController:(UISplitViewController *)splitViewController 
    collapseSecondaryViewController:(UIViewController *)secondaryViewController 
      ontoPrimaryViewController:(UIViewController *)primaryViewController 
{ 
    if (self.masterNavController.topViewController) 
    { 
     return YES; 
    } 
    return NO; 
} 
+0

元の投稿が更新されました。あなたの文脈にmasterNavControllerが何であるかはわかりません。 – AppreciateIt

1

を問題は

splitViewControllerおそらくあなたのUISplitViewControllerのデリゲートメソッドです。

私はそれが含まれているナビゲーションコントローラではなく、detailViewコントローラを返すと思う。

関連する問題