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

use*_*888 1 uitableview uitabbar ios swift

我有一个tableView到标签栏上的viewController.当我单击tabBar项时,tableView没有刷新.但是我有viewWillAppear函数:

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

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

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

为什么不重装?

谢谢!

Dav*_*ton 7

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

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

创建一个新项目,然后选择选项卡式应用程序模板.打开SecondViewController文件并添加viewWillAppear(_:)方法.在那里添加一个断点.每次切换到第二个选项卡时,都会看到它被调用.

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

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

此外,无需切换到主队列.viewWillAppear(_:)将始终在主队列上调用.

override func viewWillAppear(animated: Bool) {
    super.viewWillAppear(animated)
    tableView.reloadData()
}
Run Code Online (Sandbox Code Playgroud)