如何在click tabBar项目Swift上刷新tableView?

时间:2015-10-25 17:43:09

标签: ios swift uitableview uitabbar

我在tab Bar上的viewController中有一个tableView。当我单击tabBar项时,tableView没有刷新。但是我有viewWillAppear函数:

 override func viewWillAppear(animated: Bool) {
    dispatch_async(dispatch_get_main_queue(), { () -> Void in
        self.tableView.reloadData()
    })
}

我正在尝试使用标签栏委托来调用此函数,但不起作用:

 func tabBar(tabBar: UITabBar, didSelectItem item: UITabBarItem) {
     dispatch_async(dispatch_get_main_queue(), { () -> Void in
        self.tableView.reloadData()
    })
 }

为什么不重装?

谢谢!

3 个答案:

答案 0 :(得分:6)

您无需涉及标签栏控制器。这样做会有点矫枉过正。您将创建令人困惑的代码,以后有人会想要删除它。更新viewWillAppear(_:)中的表格视图几乎总是最好的方法。

如果一切设置正确,每次用户选择该标签并且您的视图变得可见时,系统就会调用您的视图控制器的viewWillAppear(_:)方法。因此,如果它没有被调用,则在标签栏及其视图控制器的设计中存在问题。

创建一个新项目并选择Tabbed Application模板。打开SecondViewController文件并添加viewWillAppear(_:)方法。在那里添加一个断点。每次切换到第二个标签页时,您都会看到它被调用。

其他一些想法......

你会在viewWillAppear(_:)文档中注意到它说你必须总是打电话给super。你没有。你应该。但这与你的问题无关。

此外,无需切换到主队列。始终会在主队列中调用viewWillAppear(_:)

override func viewWillAppear(animated: Bool) {
    super.viewWillAppear(animated)
    tableView.reloadData()
}

答案 1 :(得分:0)

你可以在这里找到答案: open viewcontroller from tab like in instagram camera page on IOS

基本上,您需要创建一个继承自UITabBarController的控制器,并将它在Storyboard中设置为tabBarView的自定义类。

然后通过故事板将标签设置为每个标签。

之后,如果单击了特定选项卡,则可以使用委托方法调用操作。

委托方法应如下所示:

override func tabBar(tabBar: UITabBar, didSelectItem item: UITabBarItem) {
    switch item.tag{
    case 1: //code here
         break
    default: break
    }
}

答案 2 :(得分:0)

快速5.0的答案

override func viewWillAppear(_ animated: Bool) {

    DispatchQueue.main.async {

        self.tableView.reloadData()
    }
}

使用此代码,它对我有用。