[英]Passing data with tabBar DidSelectItem using tags and PerformSegueWithIdentifier
我正在使用swift 3具有taBbar,当我选择tabBarItem时,将以编程方式调用segue以转到新的View Controller。 我还需要通过此segue传递一些数据。
我的代码(用于标签栏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)方法中使用它。 如何使用选项卡的didSelectitem方法传递数据,或者有没有其他好的方法来实现此目的? 谢谢。
prepareForSegue
方法用作重写的方法,因此应在tabBar函数的范围之外使用它。 当您调用performSegue(withIdentifier: "segueName", sender: nil)
,您在发送者中给出了nil
。 Sender
是类型为Any?
的参数Any?
,您将自定义数据传递到另一个控制器的位置。 当您将目标视图控制器转换为要使用的控制器时prepare(forSegue: UIStoryboardSegue, sender: Any?)
在prepare(forSegue: UIStoryboardSegue, sender: Any?)
,将发送方数据传递给此控制器,例如:
override func prepare(forSegue: UIStoryboardSegue, sender: Any?) {
if let controller = segue.destination as? YourDestinationViewController {
controller.receivedData = sender
}
}
我使用以下代码解决了这个问题。 似乎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
}
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.