ios - 如何在点击 tabBar 项目 Swift 上刷新 tableView?

标签 ios swift uitableview uitabbar

我在选项卡栏上有一个 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/

相关文章:

ios - swift 中的 "as"关键字是什么

swift - 如何判断一个对象的类型?

ios - IBOutlet 不来

ios - NSURLSession 下载任务在成功后失败

ios - 在类的每个函数中调用相同的代码

swift - 在 Swift 的自定义单元格中显示操作表

ios - 在 iOS 中滑动以显示后,试图使表格单元格返回其原始状态

ios - tableView.reloadData 清除数组 - 索引超出范围

应用程序打开时的 iOS 应用程序通知(如 whatsapp)

ios - iPhone 6 上不透明导航栏的背景图像渲染不正确