Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/jpa/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ios 在UITabBarController中检测选项卡上的点击_Ios_Swift_Uitabbarcontroller_Uitabbar - Fatal编程技术网

Ios 在UITabBarController中检测选项卡上的点击

Ios 在UITabBarController中检测选项卡上的点击,ios,swift,uitabbarcontroller,uitabbar,Ios,Swift,Uitabbarcontroller,Uitabbar,我已经创建了一个tabBarController,如下所示 let tabbarController = UITabBarController() let homeViewController = HomeViewController() let rewardsViewController = RewardsViewController() let moreViewController = NewMoreViewController() let homeNVc

我已经创建了一个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
}
一切正常。我可以完美地移动选项卡,现在我的homeViewController中有了ta tableView。当用户点击TabBarController的第一个选项卡时,我想重新加载它。即使用户已经在该viewController上,我也要重新加载tableView

所以基本上我怎么能检测到用户点击了第一个ViewController


请指导我,谢谢:-)

调用UITabBarControllerDelegate并实现此方法

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

}

在您的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
class YourViewController: UIViewController, UITabBarDelegate { // set protocol
或者这个:

b)

class YourTabBarController: UITabBarController { // inherit from UITabBarController
class YourViewController: UIViewController, UITabBarDelegate { // set protocol

只需实现以下委托方法

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

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

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


要访问点击的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
}

如何检测哪个选项卡被点击?每个选项卡都附带一个viewcontroller。在你的问题中,你写了“那么基本上,我怎样才能检测到用户点击了第一个ViewController?”所以在这个方法中,你将得到ViewController。您可以检查viewController或其标识符、标题等。我已经实现了此方法,但没有调用它。但是didSelectViewController正在被调用。根据标题测试它是不安全的。这不是正确的约定。我为Swift 3编写了此代码,因此如果您复制粘贴,您可能需要更正某些语句self.tabbar controller?.selectedIndex是我的关键点。没有调用didSelectItem,因此我使用了didSelectViewController。可以吗?如果(tabBarController.selectedIndex==0),则将其更改为
。没有像
这样的属性。已选择