2016-09-05 2 views
3

Я создал tabBarController, как показано ниже программноДетектирование нажмите на вкладку в UITabBarController

let tabbarController = UITabBarController() 
    let homeViewController = HomeViewController() 
    let rewardsViewController = RewardsViewController() 
    let moreViewController = NewMoreViewController() 

    let homeNVc = UINavigationController() 
    homeNVc.viewControllers = [homeViewController] 

    let rewardsNVc = UINavigationController() 
    rewardsNVc.viewControllers = [rewardsViewController] 

    let moreNVc = UINavigationController() 
    moreNVc.viewControllers = [moreViewController] 

    tabbarController.viewControllers = [homeNVc, rewardsNVc, moreNVc] 

    tabbarController.tabBar.items![0].title = NSLocalizedString("Dashboard", comment: "") 
    tabbarController.tabBar.items![1].title = NSLocalizedString("Prämien", comment: "") 
    tabbarController.tabBar.items![2].title = NSLocalizedString("Mehr", comment: "") 
    self.window?.rootViewController = tabbarController 
} 

все работает. Я могу отлично перемещаться по вкладкам. Теперь у меня есть таэквид в моем HomeViewController. Который я хочу перезагрузить, когда пользователь нажимает первую вкладку моего TabBarController. Даже если пользователь уже находится на этом viewController, я хочу перезагрузить tableView.

Итак, как я могу определить, что пользователь прослушивает первый ViewController?

пожалуйста, руководство мне спасибо :-)

ответ

5

В вашем homeViewController вам, возможно, потребуется реализовать этот метод делегата:

func tabBar(_ tabBar: UITabBar, didSelect item: UITabBarItem) { 

    //ask where it is first tab bar item 
    if self.tabBarController?.selectedIndex == 0 { 
     // your action, e.g.: 
     self.tableView.reloadData() 
    } 

} 

ПРИМЕЧАНИЕ:

Вам нужно, чтобы сохранили свой класс так:

)

class YourTabBarController: UITabBarController { // inherit from UITabBarController 

или это:

б)

class YourViewController: UIViewController, UITabBarDelegate { // set protocol 
+0

Я сделал этот код для Swift 3, поэтому, если вы скопируете-вставку, вам может понадобиться исправить некоторые утверждения – pedrouan

+0

self.tabBarController? .selectedIndex был ключевой точкой для меня didSelectItem не был получив вызов, поэтому я использовал didSelectViewController. Все хорошо ? – Byte

+0

Да, определенно. – pedrouan

3

Invoke UITabBarControllerDelegate и реализовать этот метод

func tabBarController(tabBarController: UITabBarController, didSelectViewController viewController: UIViewController){ 

} 
+1

Как я могу определить, какая вкладка была использована? – Byte

+0

Каждая вкладка прилагается к диспетчеру просмотра. В вашем вопросе вы пишете «Итак, в основном, как я могу обнаружить, что пользователь прослушивает первый ViewController?» Таким образом, в этом методе вы получите viewController. Вы можете проверить viewController или его идентификатор, заголовок и т. Д. – Sofeda

1

Просто осуществить следующие метод делегата,

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

     if item.title == "first tab name"{ 
      //Do your thing 
    } 
+0

Я воспользовался этим методом, но его не называли. Но didSelectViewController получает вызов – Byte

+0

Непросто проверить его против названия. Это неправильно. – pedrouan

1

Я недавно написал нечто подобное. Для согласованности я создал один базовый класс BaseTabBarViewController для каждой используемой Tab. Но учтите, что если вкладкой был навигационный контроллер, тот, который наследует от BaseTabBarViewController, является контроллером корневого представления. Этот базовый класс реализует протокол UITabBarControllerDelegate. В viewDidLoad мы отмечаем его как делегата. В методе делегата (Objective-C, очень похож на стремительных 3):

- (void)tabBarController:(UITabBarController *)tabBarController didSelectViewController:(UIViewController *)viewController { 


if (tabBarController.selected == 0) 
{ 
    // do what you need 
0

Чтобы получить доступ к которым tabBarItem был повернутым переопределение следующих функций в пользовательском классе UITabBarController

Swift:

override func tabBar(_ tabBar: UITabBar, didSelect item: UITabBarItem) { 
    guard let index = tabBar.items?.index(of: item) else { return } 

    // Do something with the index 
} 
Смежные вопросы