如何从另一个视图控制器实例化导航控制器?

时间:2016-06-23 12:48:17

标签: ios swift uiviewcontroller

我的目标是每当我点击第一个视图控制器上的按钮,它就会导航到另一个控制器,这是一个导航控制器。

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"

此代码的问题在于它不显示导航栏以及标签栏。我应该怎么做才能显示两者?

更新了问题

 @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"


 }

5 个答案:

答案 0 :(得分:2)

安全的方法:

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

如果您需要访问tabBarController以传递数据,您可以执行以下操作:

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
}

答案 1 :(得分: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)

}

上面的代码应该为您提供导航栏。

答案 2 :(得分:1)

在您的情况下,以下代码就足够了:

self.tabBarController.selectedIndex = 1 

由于UITabBarControllerrootViewController,您可以使用self.tabBarController访问它。您不必像在故事板中那样实例化UINavigationController

答案 3 :(得分:1)

我可以从你的StoryBoard中看到你有一个TabBarController。如果您的配置是第一个选项卡上的FirstViewController和第二个选项卡上的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. 创建一个单例类,在哪里保存数据,然后在SecondViewController viewDidLoad方法中检索数据
  3. 在UserDefaults中保存数据,然后在SecondViewController viewDidLoad方法中检索数据(如果信息不必持久,则解决方法不好)
  4. 扩展UITabBarController并使用它,在tabBarController中创建自定义var,将数据放入该变量,然后在SecondViewController viewDidLoad方法中检索数据
  5. 然后根据需要清除数据。

答案 4 :(得分:0)

导航无法从firstViewController工作,导航我们需要的东西UINavigationController。

尝试这样

enter image description here