检测UITabBarController中选项卡上的点击

时间:2016-09-05 10:26:29

标签: ios swift uitabbarcontroller uitabbar

我以编程方式创建了一个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
}

everyThing正在运作。我可以完全切换标签,现在我在homeViewController中有ta tableView。当用户点击我的TabBarController的第一个标签时,我想重新加载。即使用户已经在viewController上,我想重新加载tableView。

所以基本上如何检测用户点击第一个ViewController?

请指导我,谢谢: - )

5 个答案:

答案 0 :(得分:6)

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()
    }

}

注意

你需要像这样维护你的课程:

a)

class YourTabBarController: UITabBarController { // inherit from UITabBarController

或者这个:

b)

class YourViewController: UIViewController, UITabBarDelegate { // set protocol

答案 1 :(得分:3)

调用UITabBarControllerDelegate并实现此方法

.Value

答案 2 :(得分:1)

只需实现以下委托方法,

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

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

答案 3 :(得分:1)

我最近写过类似的东西。为了保持一致性,我为每个使用的Tab创建了一个基类BaseTabBarViewController。但是考虑到如果选项卡是导航控制器,则继承自BaseTabBarViewController的选项卡是根视图控制器。 此基类实现UITabBarControllerDelegate协议。在viewDidLoad中,我们将其标记为委托。 在委托方法中(Objective-c,在swift 3中非常相似):

include <curses.h>

int main(int argc, char *argv[]) 
{
    // init curses
    Xinitscr(argc, argv); 

    // init time
    time_t t = 0, t2;
    time(&t2);

    // main loop
    while (1) {
        if (t2 - t > 0) 
        {
            time(&t);

            clear();
            mvprintw(1,1, "%u", (unsigned int)t);
            refresh();
        }
        time(&t2);

    }

    // end curses mode
    // warning: if you do not call this at the end of your program,
    // your terminal won't be usable.
    endwin();

    return 0;
}

答案 4 :(得分:0)

要访问哪个tabBarItem,请在UITabBarController的自定义类中覆盖以下函数

<强>夫特:

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

   // Do something with the index
}