我正在使用swift 3有一个taBbar,当我选择tabBarItem时,会以编程方式调用segue以转到新的View Controller。我还需要用这个segue传递一些数据。
我的代码(对于tabbar didSelectItem):
func tabBar(tabBar: UITabBar, didSelectItem item: UITabBarItem) {
if item.tag == 0 {
self.performSegueWithIdentifier("nearbyHotelsSegue", sender: nil)
} else if item.tag == 1 {
self.performSegueWithIdentifier( "nearbyRestaurantsSegue", sender: nil)
} else if item.tag == 2 {
self.performSegueWithIdentifier( "nearbyEventsSegue", sender: nil)
} else if item.tag == 3 {
self.performSegueWithIdentifier( "morePlacesSegue", sender: nil)
}
}
从我迄今为止的研究中,我知道可以使用PrepareForSegue,但我不能在tabBar(didSelectItem)方法中使用它。如何使用tabbar didSelectitem方法传递数据,还是有其他好方法可以实现这一点? 感谢。
答案 0 :(得分:1)
prepareForSegue
方法用作重写方法,因此您应该使用tabBar函数的边界。当您致电performSegue(withIdentifier: "segueName", sender: nil)
时,您已在发件人中提供nil
。 Sender
是Any?
类型的参数,您可以将要传递的自定义数据传递给另一个控制器。在prepare(forSegue: UIStoryboardSegue, sender: Any?)
中,当您将目标视图控制器转换为要使用的视图控制器时,将发送方数据传递给此控制器,例如:
override func prepare(forSegue: UIStoryboardSegue, sender: Any?) {
if let controller = segue.destination as? YourDestinationViewController {
controller.receivedData = sender
}
}
答案 1 :(得分:0)
我使用以下代码解决了这个问题。似乎prepareForSegue不受使用PerformSegueWithIdentifier以编程方式执行segue的影响。
所以我使用了问题中未发布的代码,然后添加了以下代码来传递数据。
override func prepareForSegue(segue: UIStoryboardSegue, sender: AnyObject?) {
if segue.identifier == "nearbyHotelsSegue" {
if let toViewController = segue.destinationViewController as? NearbyHotelsViewController {
toViewController.returnedText = (searchBaseItem?.baseItemId)!
}
}
//....other ifs
}