无法让我的自定义UITableViewCell显示

时间:2013-03-21 20:27:56

标签: ios objective-c uitableview

我正在使用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;

}

我做错了什么?

谢谢!

4 个答案:

答案 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; 
}