[英]How to refresh a tableView on click tabBar item Swift?
我有一个 tableView 到选项卡栏上的 viewController 中。 当我点击 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()
})
}
为什么不重新加载?
谢谢!
您不需要在此涉及选项卡栏控制器。 这样做会矫枉过正。 您将创建令人困惑的代码,稍后有人会想要撕掉这些代码。 在viewWillAppear(_:)
更新表视图几乎总是最好的方法。
如果一切都设置正确,则每次用户选择该选项卡并且您的视图变为可见时,您的视图控制器的viewWillAppear(_:)
方法都会被调用。 因此,如果它没有被调用,那么您的标签栏及其视图控制器的设计就存在问题。
创建一个新项目并选择选项卡式应用程序模板。 打开 SecondViewController 文件并添加一个viewWillAppear(_:)
方法。 在那里添加一个断点。 每次切换到第二个选项卡时,您都会看到它被调用。
还有一些想法……
您会在viewWillAppear(_:)
文档中注意到它说您必须始终调用 super。 你不。 你应该。 但这与您的问题无关。
此外,无需切换到主队列。 viewWillAppear(_:)
将始终在主队列上调用。
override func viewWillAppear(animated: Bool) {
super.viewWillAppear(animated)
tableView.reloadData()
}
快速 5.0 的答案
在主线程中重新加载UITableView
然后检查。 我希望这对你有用。
override func viewWillAppear(_ animated: Bool) {
DispatchQueue.main.async {
self.tableView.reloadData()
}
}
您可以在这里找到答案: 像在 IOS 上的 Instagram 相机页面中一样,从选项卡中打开 viewcontroller
基本上,您需要创建一个继承自 UITabBarController 的控制器,并将其在 Storyboard 中设置为您的 tabBarView 的自定义类。
然后通过情节提要为每个选项卡设置标签。
之后,如果单击特定选项卡,您可以使用委托方法调用操作。
委托方法应如下所示:
override func tabBar(tabBar: UITabBar, didSelectItem item: UITabBarItem) {
switch item.tag{
case 1: //code here
break
default: break
}
}
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.