我在选项卡栏上有一个 tableView 到 viewController。当我点击 tabBar 项目时,tableView 没有刷新。但是我有 viewWillAppear 函数:
override func viewWillAppear(animated: Bool) {
dispatch_async(dispatch_get_main_queue(), { () -> Void in
self.tableView.reloadData()
})
}
我正在尝试使用标签栏委托(delegate)调用此函数,但不起作用:
func tabBar(tabBar: UITabBar, didSelectItem item: UITabBarItem) {
dispatch_async(dispatch_get_main_queue(), { () -> Void in
self.tableView.reloadData()
})
}
为什么不重新加载?
谢谢!
最佳答案
您不需要在此涉及标签栏 Controller 。这样做就太过分了。您将创建令人困惑的代码,以后有人会想要将其删除。在 viewWillAppear(_:)
中更新 TableView 几乎总是最好的方法。
如果一切设置正确,每次用户选择该选项卡并且您的 View 变为可见时,您的 View Controller 的 viewWillAppear(_:)
方法将被调用。因此,如果它没有被调用,则说明您的选项卡栏及其 View Controller 的设计某处存在问题。
创建一个新项目并选择选项卡式应用程序模板。打开 SecondViewController 文件并添加 viewWillAppear(_:)
方法。在那里添加一个断点。每次切换到第二个选项卡时,您都会看到它被调用。
一些其他的想法...
您会在 viewWillAppear(_:)
文档中注意到它说您必须始终调用 super。你不。你应该。但这与您的问题无关。
此外,无需切换到主队列。 viewWillAppear(_:)
将始终在主队列上调用。
override func viewWillAppear(animated: Bool) {
super.viewWillAppear(animated)
tableView.reloadData()
}
关于ios - 如何在点击 tabBar 项目 Swift 上刷新 tableView?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33332861/