使用XIB文件进行自定义Uitableview Section Header

时间:2012-09-23 22:18:48

标签: objective-c xcode uitableview storyboard xib

我想使用xib文件来自定义xcode(目标C)中的tableview部分,这里是我的文件:

SectionHeaderView.xib是一个带有UILabel的UIView

SectionHeaderView.m

#import "SectionHeaderView.h"

@implementation SectionHeaderView

@synthesize sectionHeader;

@end

SectionHeaderView.h

#import <UIKit/UIKit.h>

@interface SectionHeaderView : UIView
{
IBOutlet UILabel *sectionHeader;
}

@property (nonatomic, strong) IBOutlet UILabel *sectionHeader;

@end

和我的MasterViewController.m

#import "SectionHeaderView.h"

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

SectionHeaderView  *header = [[[NSBundle mainBundle] loadNibNamed:@"SectionHeaderView" owner:self options:nil] objectAtIndex:0];

return header;

}

直到这里工作正常,但是只要我将XIB文件所有者的自定义类设置为“SectionHeaderView”并将Label连接到“sectionHeader”,我将收到错误“NSUnknownKeyException”。我想连接这些,所以我可以在返回haeder之前通过以下代码更改label.text:

header.sectionHeader.text = headerText;

我正在为MasterViewController使用storyboard(xcode 4.5)。 非常感谢任何帮助

3 个答案:

答案 0 :(得分:15)

您可以使用关联的xib创建UITableViewCell子类,并将其用作节头。在此示例中,我将其称为 CustomTableViewHeaderCell .h / .m / .xib,并向您展示如何更改此单元格内标签的文本。

  • 在CustomTableViewHeaderCell.h中创建一个outlet属性

    @property(弱,非原子)IBOutlet UILabel * sectionHeaderLabel;

  • 将UITableViewCell添加到空的CustomTableViewHeaderCell.xib中 并将元素的类设置为 CustomTableViewHeaderCell 来自Identity Inspector。

  • 例如,还设置标识符(单元格的属性检查器) CustomIdentifier

  • 将标签拖到内容视图中并从中连接插座 CustomTableViewHeaderCell (不是文件所有者!)。

然后在每个ViewController中,您要使用表视图部分标题单元格:

1)注册你的xib以重用标识符(可能在viewDidLoad中):

[_yourTableView registerNib:[UINib nibWithNibName:@"CustomTableViewHeader" bundle:nil] forCellReuseIdentifier:@"CustomIdentifier"];

2)覆盖viewForHeaderInSection以显示自定义单元格标题视图

-(UIView*)tableView:(UITableView *)tableView viewForHeaderInSection:(NSInteger)section{
    CustomTableViewHeaderCell * customHeaderCell = [tableView dequeueReusableCellWithIdentifier:@"CustomIdentifier"];
    customHeaderCell.sectionHeaderLabel = @"What you want";
    return customHeaderCell;
}

答案 1 :(得分:9)

试试这个:我已在我的应用及其工作中测试过它:

NSArray *viewArray =  [[NSBundle mainBundle] loadNibNamed:@"SectionHeaderview" owner:self options:nil];  
UIView *view = [viewArray objectAtIndex:0]; 
UILabel *lblTitle = [view viewWithTag:101]; 
lblTitle.text = @"Text you want to set"; 
return view;

答案 2 :(得分:2)

您可以通过以下方式之一解决此问题:

1)您从UIView派生了SectionHeaderView。使用UIViewController派生此类。这将解决您的问题。

2)不要使用IBOutlet属性,而是在视图中设置UILabel的标记(比如101)。

弃掉SectionHeaderview类。

保留SectionHeaderView.XIB,仅删除.m和.h文件。

使用以下代码来查看MasterViewController类的Viewforheader方法:

{
    UIViewController *vc=[[UIViewController alloc] initWithNibName:@"SectionHeaderview" bundle:nil]

    UILable *lblTitle =[vc.view viewWithTag:101];

    lblTitle.text =@"Text you want to set";

    return vc.view;
}