19

我有一个带有自定义标题视图的表格,无论何时或为部分选择什么值,我总是得到 nil 值。我有另一张桌子也有同样的问题。

如果我打印 [tableview subviews] 的值,我可以看到标题视图,但我不知道为什么该方法不会返回任何内容。

我想要做的是获取 headerview 中的 activityIndi​​cator 并通过方法调用启动或停止它。

标题总是画得很好,但我无法得到它的参考。另外,调用headerViewForSection:不调用委托方法,这正常吗?

footerViewForSection:有同样的问题

一些代码:

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

    NSArray* objs = [[NSBundle mainBundle] loadNibNamed:@"iPadTableCells" owner:nil options:nil];
    UIView* header = [objs objectAtIndex: 0];

    UIActivityIndicatorView* activityIndicator = (UIActivityIndicatorView*) [header viewWithTag:5];
    [activityIndicator startAnimating]

    return header;

}

从任何方法:

    UIView* headerView = [tableview headerViewForSection: section];  //returns nil

    if (headerView) {
        UIActivityIndicatorView* activityIndicator = (UIActivityIndicatorView*)[headerView viewWithTag: 5];
        [activityIndicator stopAnimating];
    }
4

3 回答 3

17

回答

从文档:

要使表格视图知道您的页眉或页脚视图,您需要注册它。您可以使用 的registerNib:forHeaderFooterViewReuseIdentifier:orregisterClass:forHeaderFooterViewReuseIdentifier:方法执行此操作UITableView

(对应的 Swift 是 register(_:forHeaderFooterViewReuseIdentifier:).)

因此,您需要注册 nib,然后使用重用标识符获取它,而不是直接将其从应用程序包中拉出,这就是您现在正在做的事情。

...如果您想使用该headerViewForSection方法。

替代答案

或者,您可以检查是否在方法内继续旋转viewForHeaderInSection,然后发送调用:

[self.tableView beginUpdates];
[self.tableView endUpdates];

刷新节标题。

(请注意,这种替代方法会破坏并重新创建您的整个视图,因此如果您有一个包含大量数据的大表,它可能效率不高。)

于 2013-03-07T20:03:33.490 回答
9

自从提出这个问题以来已经有一段时间了,最​​近我遇到了一个类似的问题并在这里问了我自己的问题: UITableView -headerViewForSection 返回(null)
我相信我有答案。


先决条件步骤:

  1. 创建一个UITableViewHeaderFooterView子类并命名CustomHeaderView
  2. 为该类创建一个视图界面 nib 文件(显然您已iPadTableCells在此处命名)
  3. 在 xib 中,在其Identity Inspector中选择 View &
    • 将自定义类指定为CustomHeaderView
  4. 制作一个属性,合成并连接到xib
    • @property (strong, nonatomic) IBOutlet UIActivityIndicatorView *activityIndicator;

使用以下代码:

- (UIView*) tableView:(UITableView *)tableView viewForHeaderInSection:(NSInteger)section
{
    static NSString *HeaderIdentifier = @"header";
    CustomHeaderView *header = [tableView dequeueReusableHeaderFooterViewWithIdentifier:HeaderIdentifier];

    if(!header) {
        NSArray* objs = [[NSBundle mainBundle] loadNibNamed:@"iPadTableCells"
                                                      owner:nil
                                                    options:nil];
        header = [objs objectAtIndex: 0];
    }

    [header.activityIndicator startAnimating];
    return header;
}

那么您可以通过以下方式访问它:

CustomHeaderView *headerView = (CustomHeaderView*)[tableView headerViewForSection:section];
[headerView.activityIndicator stopAnimating];
于 2013-11-26T10:01:48.653 回答
4

迅速

UITableViewHeaderFooterView您只需要为需要返回的标题视图创建一个实例

 func tableView(tableView: UITableView, viewForHeaderInSection section: Int) -> UIView? {
        let sectionHeaderView = UITableViewHeaderFooterView()
        //customize your view here
        return sectionHeaderView
    }
于 2016-06-08T00:00:34.100 回答