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

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

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

我正在尝试使用tab bar delegate调用此函数,但不起作用:

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

为什么不重装?

谢谢!

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

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

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

其他一些想法……

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

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

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

你可以在这里找到答案: 从IOS上的instagram相机页面中的标签打开viewcontroller

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

然后通过Storyboard将Tags设置为每个Tab。

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

委托方法应如下所示:

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