我的目标是每当我点击第一个视图控制器上的按钮,它就会导航到另一个控制器,这是一个导航控制器。
firstViewController和secondViewController没有连接或任何东西。
照片
我使用了这段代码
@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"
}
答案 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
由于UITabBarController
是rootViewController
,您可以使用self.tabBarController
访问它。您不必像在故事板中那样实例化UINavigationController
。
答案 3 :(得分:1)
我可以从你的StoryBoard中看到你有一个TabBarController。如果您的配置是第一个选项卡上的FirstViewController和第二个选项卡上的SecondViewController,您只需更改TabBarController selectedIndex属性:
@IBAction func buttonTapped(sender: UIButton) {
tabBarController?.selectedIndex = 1
}
如果要将数据传递给SecondViewController,可以尝试以下解决方案之一:
let controller = tabBarController.viewControllers[1] as SecondViewController!
controller.data = "some data"
由于SecondViewController还没有准备就绪,这种灵魂不起作用。然后根据需要清除数据。
答案 4 :(得分:0)