2016-06-23 6 views
1

私の目標は、最初のビューコントローラでボタンをクリックするたびに、ナビゲーションコントローラである別のコントローラに移動することです。他のView Controllerからナビゲーションコントローラをインスタンス化する方法は?

firstViewControllerとsecondViewControllerには何も接続がありません。

ピクチャー

enter image description here

私はこのコード

@IBAction func buttonTapped(sender: UIButton) { 

    let storyboard = UIStoryboard(name: "Main", bundle: nil) 
    let vc = storyboard.instantiateViewControllerWithIdentifier("secondViewCtrl") as! SecondViewController 
    self.presentViewController(vc, animated: true, completion: nil) 

} 

私は

vc.name = "Myname" 

このコードに問題があるようにデータを渡すことができるようにinstatiate理由を使用しましたナビゲーションバーは表示されず、タブバー。両方を表示するにはどうすればよいですか?

更新質問あなたの場合

@IBAction func buttonTapped(sender: UIButton) { 
    guard let tabBarController = tabBarController else { return } 
      tabBarController.selectedIndex = 1 


      let storyboard = UIStoryboard(name: "Main", bundle: nil) 
      let vc = storyboard.instantiateViewControllerWithIdentifier("trackYourGenie") as! TrackYourGenieViewController 
      let navController = tabBarController.viewControllers![1] 
      let secondViewController = navController.topViewController 
      vc.name = "Myname" 


} 

答えて

2

安全なアプローチのように試してみてください:あなたは、単に行うことができ件のデータを渡すためにあなたのtabBarControllerにアクセスする必要がある場合は

guard let tabBarController = tabBarController else { return } 
tabBarController.selectedIndex = 1 

let navController = tabBarController.viewControllers[1]! as! UINavigationController 
let secondViewController = navController.topViewController 

あなたの方法は次のようになります。

@IBAction func buttonTapped(sender: UIButton) { 
    guard let tabBarController = tabBarController else { return } 
    let navController = tabBarController.viewControllers[1]! as! UINavigationController 
    let secondViewController = navController.topViewController as! SecondViewController 
    secondViewController.name = "my name" 
    tabBarController.selectedIndex = 1 
} 
+0

を使用する必要があります。これはどこに入れますか?ビューでロードしましたか? – airsoftFreak

+0

@airsoftFreakあなたのボタンに入れることができます。タップ –

+0

これでは一般的に新しいですが、完全なコードで表示してください。ありがとう – airsoftFreak

1

、次のコードは十分なものでなければならない:UITabBarControllerとして

self.tabBarController.selectedIndex = 1 

があなたのrootViewControllerで、あなたはself.tabBarControllerとそれにアクセスすることができます。ストーリーボード内にあるので、UINavigationControllerをインスタンス化する必要はありません。

+0

私がviewDidLoadでこれを行うと、私はtabBarControllerでnilを取得します – airsoftFreak

1

StoryBoardからTabBarControllerがあることがわかります。お使いの設定がそれであるとFirstViewControllerは2番目のタブの最初のタブとSecondViewController上にある場合は、あなただけのTabBarController selectedIndexプロパティを変更することができます。

@IBAction func buttonTapped(sender: UIButton) { 

    tabBarController?.selectedIndex = 1 
} 

あなたはこれらのソリューションのいずれかを試すことができますSecondViewControllerためにデータを渡したい場合は、次の

  1. let controller = tabBarController.viewControllers[1] as SecondViewController! controller.data = "some data" SecondViewControllerがまだ準備されていないため、このソートは機能しませんでした。
  2. は、データを保存するためにシングルトンクラスを作成し、それから(情報が永続的である必要はありません場合は、悪い溶液)UserDefaults中
  3. セーブデータは、その後、
  4. SecondViewController viewDidLoadメソッドでデータを取得SecondViewController viewDidLoadメソッドでデータを取得UITabBarControllerを拡張して使用し、tabBarControllerでカスタムvarを作成し、その変数にデータを入れてからSecondViewController viewDidLoadメソッドでデータを取得します。

データをクリアします。

+0

どこに置くのですか? viewdidloadで? – airsoftFreak

+0

buttonTapped IBActionメソッドでは、更新された応答を表示します – lubilis

+0

他のviewControllerにデータを渡したい場合はどうすればいいですか?私は私の質問を更新しました。 – airsoftFreak

0

UINavigationControllerが必要なものをナビゲートするために、firstViewControllerからのナビゲーションは機能しません。

この

enter image description here

2

あなたはナビゲーションバーを取得しませんので、ビューコントローラをインスタンス化しています。ナビゲーションバーを取得するには、ナビゲーションコントローラをインスタンス化してください.2番目のビューは子供のみであるため、デフォルトでは2番目のビューが表示されます。

@IBAction func buttonTapped(sender: UIButton) { 

let storyboard = UIStoryboard(name: "Main", bundle: nil) 
let vc = storyboard.instantiateViewControllerWithIdentifier("Navigation Controller Id") as! UINavigationController 
self.presentViewController(vc, animated: true, completion: nil) 

} 

上記のコードでは、ナビゲーションバーが表示されます。

+0

これは間違いですが、現在のnavigationControllerを再インスタンス化する必要はありません。メモリの無駄です。 –

関連する問題