2016-08-08 5 views
1

У меня есть UITabBar с 4 вкладками.Обнаружение, когда элемент tabBar нажат, когда отображается страница

Я хочу, что конкретная функция будет вызываться в каждом ViewController вкладки, когда tabBarItem нажата дважды (например, пользователь теперь ProfileVC и давит на Profile пункта, я хочу, чтобы обновить представление).

Как определить, когда пользователь нажал на вкладке, на которой он сейчас находится?

Спасибо!

+0

ли у попробовать методы TabBar делегата? –

+0

Взгляните на этот ответ. [Ссылка] (http://stackoverflow.com/a/5455756/1896921) – AtWork

ответ

1

Один вариант - освежающий внутри viewWillAppear() метод. А второй - значительно длинный.

В родительском контроллере представления

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

Спасибо за ваш ответ, 'viewWillAppear()' не вызывается при повторном нажатии на тот же элемент табуляции. И о втором варианте, я не использую раскадровку, как я могу это сделать? благодаря! –

+0

Второй ответ не требует раскадровки. Какую часть вы не понимаете? – LIH

+0

segues только для раскадровки, не так ли? –

Смежные вопросы