仅刷新UITableView中的自定义标题视图?

Blu*_*ear 18 objective-c uitableview ios

我的UITableView在每个部分都有自定义的UIView标头.我只需要刷新标题而不是该部分中的其他内容.我已经尝试了UITableView,即使它应该也没有返回任何东西.无论如何我能做到这一点吗?

编辑:基于新建议的代码

我也给了它一个镜头,它在该方法中调用/更新UIView,但是这些更改不会在视觉上传播到屏幕上.

for (int i = 0; i < self.objects.count; i++) {
    UIView *headerView = [self tableView:self.tableView viewForHeaderInSection:i];
    [headerView setNeedsDisplay];
}
Run Code Online (Sandbox Code Playgroud)

Mat*_*uch 19

而不是调用setNeedsDisplay,通过设置它的属性自己配置标头.当然,您必须获取表中的实际标头,不要调用委托方法,因为该方法通常会创建新的标头视图.

我通常在一个小调用方法中执行此操作tableView:viewForHeaderInSection:.

例如:

- (void)configureHeader:(UITableViewHeaderFooterView *)header forSection:(NSInteger)section {
    // configure your header
    header.textLabel.text = ...
}

- (UIView *)tableView:(UITableView *)tableView viewForHeaderInSection:(NSInteger)section {
    UITableViewHeaderFooterView *header = [tableView dequeueReusableHeaderFooterViewWithIdentifier:@"Header"];
    [self configureHeader:header forSection:section];
}

- (void)reloadHeaders {
    for (NSInteger i = 0; i < [self numberOfSectionsInTableView:self.tableView]; i++) {
        UITableViewHeaderFooterView *header = [self.tableView headerViewForSection:i];
        [self configureHeader:header forSection:i];
    }
}
Run Code Online (Sandbox Code Playgroud)

  • 如果`[self.tableView headerViewForSection:i]`返回nil,那么你的tableView没有这个部分的标题,或者它当前不可见.当然`[自我的tableView:self.tableView viewForHeaderInSection:我]`会返回一个观点,但这种观点是新创建的,而不是视图层次的一部分; 你看不到那个观点. (3认同)
  • 我刚想通了.我已经设置了我的自定义类来返回UIView而不是UITableViewHeaderFooterView.一旦我这样做,一切都很好!您是否建议每次在viewForHeader/Footer方法中返回UITableViewHeaderFooterView? (2认同)