2017-03-08 4 views
0

私はswaを使用しています.taBbarを持っています。TabBarItemを選択すると、segueはプログラマチックに呼び出され、新しいView Controllerに移動します。私もこのセグを使っていくつかのデータを渡す必要があります。 (タブバー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を使用することができます知っているが、私はタブバー(didSelectItem)メソッド内でこれを使用することはできません。 tabbar didSelectitemメソッドを使用してデータを渡すにはどうすればよいですか、これを実現する他の方法がありますか?おかげさまで

+1

問題は、uはあなたからのデータを渡すために弱々しいその作業やない –

+1

に直面するものタブバーアイテムをタブバーアイテムにするか、そうでない場合はUIiewControllerを持つタブバーアイテム –

+0

@ Anbu.Karthik from tabBarItem to UiViewController。私の答えをチェックする –

答えて

0

次のコードを使用して解決しました。 prepareForSegueはPerformSegueWithIdentifierを使用してセグをプログラムで実行することによって影響を受けていないようです。
私はこの質問に掲載されたコードをそのまま使用し、次のコードを追加してデータを渡しました。あなたがTabBarの機能の境界の外にそれを使用する必要がありますので

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方法は、オーバーライドされた一つとして使用されます。 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 
} 
} 
関連する問題