【问题标题】:Is there a way to force a refresh of just a single header in UITableView?有没有办法强制刷新 UITableView 中的单个标题?
【发布时间】:2012-01-04 18:46:46
【问题描述】:

我有一个 UITableView,我想强制刷新特定的节标题行,而不是数据行。比如刷新section 3的header。我知道如何重新加载整个section(header加数据),但是可以只刷新section header吗?

编辑:当表的一个部分中的数据发生更改时,我想更新不同部分的标题中的信息。因此,我需要获取对节标题的引用,然后刷新它。

【问题讨论】:

标签: iphone objective-c uitableview


【解决方案1】:

如果标头是自定义的UIView,那么您可以在UIView 上调用setNeedsDisplay 而不是UITableView

【讨论】:

  • 如何获取section header自定义UIView的引用来调用setNeedsDisplay?我知道如何获取对特定行的引用,但不知道标题。
  • 我相信即使标题不是“自定义”UIView,您也可以这样做,因为并非所有标题实例都是 UIViews
  • 1:维护您在数组中创建的标题视图或 2:遍历 UITableView 子视图,直到找到带有所需 view.tag 的标题
  • 有趣的是,如果您使用 [tableView reloadSections...] 刷新单个部分,即使您调用 [customHeaderView setNeedsDisplay],其他自定义标题视图也不会重绘。我必须重新加载相关的部分才能重绘它们的标题视图。
  • @ChrisP & @NSInterMax:你如何获得对部分标题自定义 UIView 的引用来调用 setNeedsDisplay? UIView* sectionHeader = [self tableView:self.tableView viewForHeaderInSection:[indexPath section]];
【解决方案2】:

好吧,就我而言,在一些异步任务之后,我需要更新我的自定义部分标题视图。

我得到它来更新它的高度使用: 这个 Swift 3+ 代码

//to reload your cell data
self.tableView.reloadData()
DispatchQueue.main.async {
// this is needed to update a specific tableview's headerview layout on main queue otherwise it's won't update perfectly cause reloaddata() is called
  self.tableView.beginUpdates()
  self.tableView.endUpdates()
}        

【讨论】:

  • 我不知道为什么 reloadData() 不刷新节标题,这可能是一个错误,但beginUpdates() endUpdates() 也对我有用。
  • 这对我有帮助,在 reloadData 后最后一节页脚消失时遇到了麻烦
  • 这不会重新加载整个表吗? OP 明确希望只重新加载一个标头。
【解决方案3】:

UITableView *没有任何此类方法可以仅重新加载标题视图/标题...您必须重新加载整个部分或表格。

【讨论】:

【解决方案4】:

我不敢苟同。我在删除带有自定义部分标题的行时遇到了这个问题,并且(至少在 iOS 6 中)你可以简单地调用:

[self tableView:self.tableView viewForHeaderInSection:[indexPath section]];

只要您有适当的代码在该方法中返回视图,您就可以轻松刷新特定部分的标题:

- (UIView *)tableView:(UITableView *)tableView viewForHeaderInSection:(NSInteger)section {

    if ([self tableView:tableView numberOfRowsInSection:section] == 0) {

        return nil; //hide the header if there are no rows...

    } else {
        // configure or refresh the header...
    }
}

【讨论】:

  • 你知道这样的事情在 UICollectionViews 中是否可行?
  • 这是正确的答案,应该被接受。
  • 你能检查一下这个麻烦吗stackoverflow.com/questions/31692692/…
  • 您正在调用表的委托方法,这是一个错误。如果只有一个部分,则应重新加载表格,如果有多个部分,则应重新加载单个部分。
猜你喜欢
  • 2016-01-11
  • 2012-11-04
  • 1970-01-01
  • 2014-06-21
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2010-11-28
相关资源
最近更新 更多