如何在单击 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?的主要内容,如果未能解决你的问题,请参考以下文章

Swift - 以编程方式刷新约束

点击tabBar时刷新tableView

swift tabbar页面切换时刷新的方法

在 Swift 3 中单击标签栏项目时从底部打开弹出窗口?

如何在 tabBar swift 中更改项目或图像颜色?

如何使用子视图控制器中的按钮单击更改 tabBar 项目标题