2

I am using a TableView xib and all the delegates and datasource seem to be running fine. If I set self.textLabel.text, it displays the generic number of tableviews correctly, but I need to have my custom TableViewCell showing.

I created a HistoryCell.xib that has just a tableviewcell in it. I created a UITableViewCell class "HistoryCell.h/HistoryCell.m" and it is set as the file owner of HistoryCell.xib. I connected the UILabels to the HistoryCell.h UILabel statusLabel UILabel nameLabel UILabel timeLabel

In my main ViewController class int he cellForRowAtIndexPath

I am putting in

- (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;

}

What am I doing wrong?

Thanks!

4

4 回答 4

8

您应该像这样注册笔尖(可能在 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;

}

于 2013-03-21T21:21:43.170 回答
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 最新版本时使用的涉及更多。如果编辑后的版本不适合你,我会挖掘一个旧项目并记住我是如何做到的。

于 2013-03-21T20:33:10.470 回答
0

当您将 tableViewCell 与 xib 一起使用时,同时从 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;

    }
于 2013-03-21T20:35:17.820 回答
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; 
}
于 2014-03-27T13:34:35.873 回答