我正在使用TableView xib,所有委托和数据源似乎运行正常。
如果我设置self.textLabel.text
,它会正确显示通用的tableviews数,但我需要显示自定义的TableViewCell。
我创建了一个只包含tableviewcell的HistoryCell.xib。
我创建了一个UITableViewCell类“HistoryCell.h / HistoryCell.m”,它被设置为HistoryCell.xib的文件所有者。
我将UILabels连接到HistoryCell.h
UILabel statusLabel
UILabel nameLabel
UILabel timeLabel
在我的主ViewController类中,cellForRowAtIndexPath
我正在加入
- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath
{
static NSString *CellIdentifier = @"historyCellType";
HistoryCell *cell = [tableView dequeueReusableCellWithIdentifier:CellIdentifier];
if (cell == nil) {
cell = [[HistoryCell alloc] initWithStyle:UITableViewCellStyleDefault reuseIdentifier:CellIdentifier];
}
cell.nameLabel.text = @"Donald Duck";
return cell;
}
我做错了什么?
谢谢!
答案 0 :(得分:8)
您应该像这样注册nib(可能在viewDidLoad中):
[self.tableView registerNib:[UINib nibWithNibName:@"HistoryCell" bundle:nil ] forCellReuseIdentifier:@"historyCellType"];
然后在你的cellForRowAtIndexPath方法中,使用这种新方法,你不需要if cell == nil子句:
- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath
{
HistoryCell *cell = [tableView dequeueReusableCellWithIdentifier:@"historyCellType" forIndexPath:indexPath];
cell.nameLabel.text = @"Donald Duck";
return cell;
}
答案 1 :(得分:4)
您需要反序列化实际的XIB数据:
HistoryCell *cell = [tableView dequeueReusableCellWithIdentifier:CellIdentifier];
if (cell == nil) {
NSArray *cellnib = [[NSBundle mainBundle] loadNibNamed:@"HistoryXIBName" owner:self options:nil];
cell = (HistoryCell *)[cellnib objectAtIndex:0];
}
否则它只是使用“默认”单元格。
编辑:此外,如果您正在使用故事板,动态单元原型将无需从NIB文件创建单元格(如果您可以选择这样做。)
编辑第二名: 您也可以尝试这个(假设您使用的是ARC):
HistoryCell *cell = [tableView dequeueReusableCellWithIdentifier:CellIdentifier];
if (cell == nil) {
HistoryCell *aNewCell = [[HistoryCell alloc] initWithNibName:@"HistoryXIBName" bundle:nil];
cell = (HistoryCell *)*aNewCell.view;
}
在包含视图的XIB文件中有另一种方法使用出口到您的单元格,这在iOS4当前时我曾经使用过多一点。如果编辑后的版本不适合您,我会挖出一个旧项目并记住我是如何做到的。
答案 2 :(得分:0)
在xib中使用uitableViewCell时,从xib加载实例化。
- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath
{
static NSString *CellIdentifier = @"historyCellType";
HistoryCell *cell = [tableView dequeueReusableCellWithIdentifier:CellIdentifier];
if (cell == nil) {
cell = [[[NSBundle mainBundle]loadNibNamed:@"HistoryCell"
owner:nil
options:nil]lastObject];
}
cell.nameLabel.text = @"Donald Duck";
return cell;
}
答案 3 :(得分:0)
- (UITableViewCell *)tableView:(UITableView *)tableView
cellForRowAtIndexPath:(NSIndexPath *)indexPath {
static NSString *cellidentifier=@"cell1";
customcell *cell =
(customcell*)[tableView dequeueReusableCellWithIdentifier:cellidentifier];
if (cell==nil) {
[tableView registerNib:[UINib nibWithNibName:@"Customcell" bundle:nil]
forCellReuseIdentifier:cellidentifier];
cell =
(customcell*)[tableView dequeueReusableCellWithIdentifier:cellidentifier
forIndexPath:[NSIndexPath indexPathForItem:indexPath.row
inSection:indexPath.section]];
}
return cell;
}