如何在单击 tabBar 项目 Swift 上刷新 tableView?
Posted
技术标签:
【中文标题】如何在单击 tabBar 项目 Swift 上刷新 tableView?【英文标题】:How to refresh a tableView on click tabBar item Swift? 【发布时间】:2015-10-25 17:43:09 【问题描述】:我在标签栏上的 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()
)
为什么不重新加载?
谢谢!
【问题讨论】:
您是否制作了自己的标签栏。表示自定义标签栏 mm 不,是添加了TabBar Controller,需要自定义tabbar吗? 【参考方案1】:您不需要在其中涉及标签栏控制器。这样做将是矫枉过正。您将创建令人困惑的代码,以后有人会想要删除这些代码。更新viewWillAppear(_:)
中的表格视图几乎总是最好的方法。
如果一切设置正确,您的视图控制器的viewWillAppear(_:)
方法将在每次用户选择该选项卡并且您的视图变得可见时被调用。因此,如果它没有被调用,则说明标签栏及其视图控制器的设计存在问题。
创建一个新项目并选择选项卡式应用程序模板。打开 SecondViewController 文件并添加一个viewWillAppear(_:)
方法。在那里添加一个断点。每次切换到第二个选项卡时都会看到它被调用。
其他一些想法...
您会在 viewWillAppear(_:)
文档中注意到它说您必须始终调用 super。你不是。你应该。但这与您的问题无关。
此外,无需切换到主队列。 viewWillAppear(_:)
将始终在主队列上调用。
override func viewWillAppear(animated: Bool)
super.viewWillAppear(animated)
tableView.reloadData()
【讨论】:
【参考方案2】:Swift 5.0 的答案
在主线程中重新加载UITableView
然后检查。我希望这对你有用。
override func viewWillAppear(_ animated: Bool)
DispatchQueue.main.async
self.tableView.reloadData()
【讨论】:
【参考方案3】:您可以在这里找到答案: 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
【讨论】:
以上是关于如何在单击 tabBar 项目 Swift 上刷新 tableView?的主要内容,如果未能解决你的问题,请参考以下文章