2017-03-08 11 views
0

我正在使用swift 3有一個taBbar,當我選擇一個tabBarItem時,會以編程方式調用segue以轉到新的視圖控制器。我也需要通過這個segue傳遞一些數據。使用tabBar DidSelectItem使用標籤和PerformSegueWithIdentifier傳遞數據

我的代碼(的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方法傳遞數據,還是有任何其他好方法來實現這一點? 謝謝。

+1

什麼問題ü面臨其工作或不 –

+1

你婉通過從數據標籤欄項目到標籤欄項目,或者從tabBarItem到UiViewController的UIiewControllers –

+0

@ Anbu.Karthik的標籤欄項目。檢查我的答案 –

回答

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 
} 
1

prepareForSegue方法被用作覆蓋的一個,所以你應該使用它的TabBar功能的界限的。當您撥打performSegue(withIdentifier: "segueName", sender: nil)時,您已在發件人中提供nilSender是類型爲Any?的參數,您將自定義數據傳遞給另一個控制器。在prepare(forSegue: UIStoryboardSegue, sender: Any?)當你投你的目的地視圖控制器,你要使用,發送數據傳遞給該控制器之一,例如:

override func prepare(forSegue: UIStoryboardSegue, sender: Any?) { 
if let controller = segue.destination as? YourDestinationViewController { 
controller.receivedData = sender 
} 
}