繁体   English   中英

如何在单击 tabBar 项 Swift 上刷新 tableView?

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM