我想使用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)。 非常感谢任何帮助
答案 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;
}