我在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()
})
}
为什么不重装?
谢谢!
答案 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()
}
}
使用此代码,它对我有用。