Я создал tabBarController программно, как показано ниже

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
}

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

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

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

3
Byte 5 Сен 2016 в 13:26

4 ответа

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

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

        if item.title == "first tab name"{
            //Do your thing
    }
1
Poles 5 Сен 2016 в 10:44

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

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


if (tabBarController.selected == 0)
{
   // do what you need
1
virt 7 Сен 2016 в 08:24

Чтобы получить доступ к тому, какой 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
}
0
Juan Ramirez 25 Авг 2017 в 15:41

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

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

}
4
Sofeda 5 Сен 2016 в 10:33