2016-10-20 25 views
0

親ビューコントローラと子ビューコントローラ用のナビゲーションコントローラがあります。子ビューコントローラは、2つの他のビューコントローラ、すなわち "UserLoginViewController"と "RegisterVC"に分割する。私は、UserLoginの子ビューボタンが親ビューコントローラとそのナビゲーションコントローラを含むSegueを実行するButtonアクションを実行するようにします。'UINavigationController'タイプの値を 'UIViewController'にキャストできませんでした

これは私が使用するコードです:

override func prepareForSegue(segue: UIStoryboardSegue, sender: AnyObject?) { 
     if segue.identifier == Constants.embedSegue { 
      let childViewController = segue.destinationViewController as! UserLoginViewController 
      childViewController.delegate = self 
     } 
    } 

parentVCからUserLoginVCを呼び出します。

iは

は、型の値(0x109aa7860) 'Storey_Keeper.UserLoginViewController' から 'UINavigationController'(0x10645b810)にキャストできませんでしたというエラーを取得します。

ヘルプ?

+0

'destinationViewController'はナビゲーションコントローラです。 – matt

答えて

0

はこれを試してください:あなたのUserLoginViewControllerは、それ自身のUINavigationControllerに埋め込まれている場合

let nav = segue.destinationViewController as! UINavigationController 
let childViewController = nav.viewControllers[1] as! UserLoginViewController 
+0

しかし、UserLoginViewControllerは私のtopViewControllerではありません –

+0

これを試しましたか? – KKRocks

+0

タイプ 'Storey_Keeper.HomePageViewController'の値を 'Storey_Keeper.UserLoginViewController' –

2

segue.destinationViewControllerUINavigationViewControllerになります。あなたはこのようにそれを得ることができます

override func prepareForSegue(segue: UIStoryboardSegue, sender: AnyObject?) { 
    if segue.identifier == Constants.embedSegue { 

     if let navigationController = segue.destinationViewController as? UINavigationController { 
      let childViewController = navigationController.topViewController as? UserLoginViewController 
      childViewController?.delegate = self 
     } 
    } 
} 

私は、一般的に、鋳造力に抗しアドバイスでしょう。

+0

UserLoginViewControllerはそのナビゲーションコントローラのtopViewControllerではありません。 –

+0

セグをどのように接続したかを見てみましょう。どのようにUserLoginViewControllerをプレゼンテーションしていますか?モーダルまたはプッシュ? – tsp

+0

私はプッシュでそれを提示しています。 –

関連する問題