如何刷新tableView在点击选项栏项目Swift



我有一个tableView到标签栏上的viewController。当我点击tabBar item时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(_:)方法将被调用,每次用户选择那个选项卡,你的视图变得可见。如果它没有被调用,你的标签栏和它的视图控制器的设计有问题。

创建一个新项目并选择Tabbed Application模板。打开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()
    }
}

你可以在这里找到答案:打开viewcontroller从选项卡,就像在IOS上的instagram相机页面

基本上,你需要创建一个继承自UITabBarController的控制器,并在Storyboard中将其设置为tabBarView的自定义类。

然后通过Storyboard为每个Tab设置Tags。

之后,你可以使用委托方法来调用一个操作,如果一个特定的选项卡被点击。

委托方法应该是这样的:

override func tabBar(tabBar: UITabBar, didSelectItem item: UITabBarItem) {
    switch item.tag{
    case 1: //code here
         break
    default: break
    }
}

最新更新