[英]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.