2016-08-08 7 views
1

私はUITabBarに4つのタブがあります。ページがあるときにtabBar項目が押されたことを検出する

私はtabBarItemが二回(のような、ユーザーがProfile項目にProfileVCとプレスされるようになりました、私はビューをリフレッシュしたい)が押されたときに特定の機能がタブの各ViewControllerに呼び出されることをしたいと思います。

ユーザーは、現在表示されているタブを押したときをどのように検出できますか?

ありがとうございました!

+0

Uはタブバーのデリゲートメソッドを試してみましたか? –

+0

この回答を見てください。あなたの答えをありがとう、 'viewWillAppear()'は、同じタブ項目をタップすると呼び出されません。[リンク](http://stackoverflow.com/a/5455756/1896921) – AtWork

答えて

1

viewWillAppear()の方法では1つのオプションがリフレッシュされます。そして第2のものはかなり長い。各タブのビューコントローラで

親ビューコントローラで

protocol ParentDelegate { 
    func refresh() 
} 

class LandingViewController: UIViewController, UITabBarDelegate { 

    var delegate: ParentDelegate? 
    var selectedItem: UITabBarItem! 

    override func viewDidLoad() { 
     super.viewDidLoad() 
     self.tabBar.delegate = self 
     self.selectedItem = self.tabBar.selectedItem 
    } 

    override func prepareForSegue(segue: UIStoryboardSegue, sender: AnyObject?) { 

     if segue.identifier == "SegueNameForDestinationViewController1" { 

      if let vc = segue.destinationViewController as? YourDestinationViewController1 { 
       self.delegate = vc.self 
      } 

     } else if segue.identifier == "SegueNameForDestinationViewController2" { 

      if let vc = segue.destinationViewController as? YourDestinationViewController2 { 
       self.delegate = vc.self 
      } 

     } 
    } 

    func tabBar(tabBar: UITabBar, didSelectItem item: UITabBarItem) { 

     if self.selectedItem == item { 
      self.delegate?.refresh() 
     } 
     self.selectedItem = item 
    } 
} 

class TabViewController: UIViewController, ParentDelegate { 

    func refresh() { 
     //write your code here 
    } 
} 
+0

2番目の選択肢については、私はストーリーボードを使用していません、どうすればいいですか?ありがとう! –

+0

2番目の答えはストーリーボードを必要としません。あなたは理解していない部分は? – LIH

+0

セグはストーリーボードのためのものですか? –

関連する問題