8

我想使用 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”并将标签连接到“sectionHeader”,我将收到错误“NSUnknownKeyException”。我想连接这些,所以我可以在返回 haeder 之前通过以下代码更改 label.text:

header.sectionHeader.text = headerText;

我正在为 MasterViewController 使用故事板(xcode 4.5)。将不胜感激任何帮助

4

3 回答 3

15

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

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

    @property (weak, nonatomic) IBOutlet UILabel *sectionHeaderLabel;

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

  • 还设置标识符(单元格的属性检查器),例如 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;
}
于 2014-09-16T12:40:10.170 回答
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;
于 2012-09-26T13:07:28.657 回答
2

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

1)您从UIView. 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;
}
于 2012-09-24T07:09:50.167 回答