通过Storyboard和新的Xib实现自定义表节标题

时间:2013-01-28 20:59:00

标签: ios

这就是我所做的:

我创建了一个自定义xib文件,该文件具有用于自定义表格节标题的小UIView。 我将自定义xib文件归类。

我想将它添加到tableView作为标题。我查看了一些资源,但它们似乎已经过时或缺少信息。

在文档中,我看到了添加自定义标头的参考,其中包含以下说明:

  

要使表格视图能够识别页眉或页脚视图,您需要注册它。您可以使用registerNib:forCellReuseIdentifier:或registerClass:forCellReuseIdentifier:UITableView的方法。

当我将tableView添加到我的故事板视图时,很容易在XCode中为其分配重用标识符。我甚至能够创建一个自定义单元xib文件,它还有一个在XCode中重用标识符的位置。

当我为节标题创建自定义UIView时,它没有重用标识符的条目。没有这个,我不知道如何使用registerNib:forCellReuseIdentifier

更多信息: 我有一个内部有tableView的故事板场景。 tableView是一个链接的自定义类,tableView对象在父视图的ViewController文件中有一个插座。

ViewControllerUITableViewDataSourceDelegateUITableViewDelegate。再一次,我能够毫无问题地实现自定义单元格。除了标题之外,我甚至无法以任何方式修改标题。

我尝试从自定义[[self tableHeaderView] setBackgroundColor:[UIColor clearColor]];类调用方法tableView,但没有任何反应。我尝试使用插座名称在父ViewController类中使用此方法,如下所示: [[self.tableOutlet tableHeaderView] setBackgroundColor:[UIColor clearColor]];

非常感谢任何帮助。

编辑:(无法将背景更改为透明)

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

    HeaderView *headerView = [self.TableView dequeueReusableHeaderFooterViewWithIdentifier:@"tableHeader"];

    // Set Background color
    [[headerView contentView] setBackgroundColor:[UIColor clearColor]];

    // Set Text
    headerView.headerLabel.text = [self.sectionArray objectAtIndex:section];

    return headerView;
}

2 个答案:

答案 0 :(得分:20)

您不需要在xib中设置标识符 - 您只需在注册时使用相同的标识符,并在标题视图出列时使用。在viewDidLoad方法中,我注册了这样的视图:

[self.tableView registerNib:[UINib nibWithNibName:@"Header1" bundle:nil] forHeaderFooterViewReuseIdentifier:@"header1"];

然后,在委托方法中:

-(UIView *)tableView:(UITableView *)tableView viewForHeaderInSection:(NSInteger)section {
    UIView *headerView = [self.tableView dequeueReusableHeaderFooterViewWithIdentifier:@"header1"];
    return headerView;
}

-(CGFloat)tableView:(UITableView *)tableView heightForHeaderInSection:(NSInteger)section {
    return 100;
}

答案 1 :(得分:0)

关于背景颜色的问题(除非你想透明):

您可以创建占据整个视图的UIView,然后更改其背景颜色。

如果您不希望其他人知道发生了什么,您可以覆盖backgroundColor属性:

//interface
@property (copy, nonatomic) UIColor *backgroundColor;


//implementation
@dynamic backgroundColor;

- (void)setBackgroundColor:(UIColor *)backgroundColor {
    //self.viewBackground is the created view
    [self.viewBackground setBackgroundColor:backgroundColor];
}

- (UIColor *)backgroundColor {
    return self.viewBackground.backgroundColor;
}