3

我无法让我CustomTableViewCell的子类UITableViewCell出现在我的表格视图中。

我正在使用 xib 来表示该单元格,但我假设数据源委托的代码不会更改。我确保在表格视图单元格 XIB 中设置了相同的重用标识符。

我将问题与返回表格单元格的数据源方法无法正常工作的事实隔离开来,这里是:

- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath
{
    static NSString *CellIdentifier = @"Cell";
    CustomTableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:CellIdentifier];

    DataObject *foo = [self.dataArray objectAtIndex:indexPath.row];

    if (cell == nil) 
    {
        cell = [[CustomTableViewCell alloc] initWithStyle:UITableViewCellStyleDefault reuseIdentifier:CellIdentifier];
    }

    [[cell overview] setText:foo.overview];
    [[cell price] setText:foo.price];
    NSLog(@"cell initialized, description text is %@",cell.overview.text);

    return cell;
}

不知道为什么这不起作用,但最后一个日志语句总是在最后打印一个(null),是的,我确实验证overview了数据对象的属性中是否有一个有效的字符串。同样的事情price

4

2 回答 2

4

1)使您的自定义单元格类分开

2)XIB:文件所有者类更改为 NSObject

3) XIB : UITableViewCell 更改为 MyTableViewCell

4)您要在表格视图代码中添加的位置

- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath{

    static NSString *CellIdentifier = @"MyCell";

    MyTableViewCell *cell = (MyTableViewCell*) [tableView dequeueReusableCellWithIdentifier:CellIdentifier];

    if (cell == nil) {

        NSArray *arrayCellXib = [[NSBundle mainBundle] loadNibNamed:@"MyTableViewCell" 
                                                              owner:self 
                                                            options:nil];
        if (indexPath.row == 0) {
            // first table cell
            cell = [arrayCellXib objectAtIndex:0]; // *
            ...... 
         }else {

            cell = [arrayCellXib objectAtIndex:1]; // *
         }
        ...
      }
   return cell;

}

如果您想拥有多个自定义单元格,索引 0,1 ... 处的对象是您在 xib 中创建 MyTableViewCell 的顺序的索引。意味着在 MyTableViewCell 类中,您可以制作无限的自定义单元格并根据要求使用。

通常,只需在 XIB 中创建一个自定义单元格并执行以下操作:

- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath
    {
    int thisRow = indexPath.row;
    NSString *exampleText = [yourData objectAtIndex:thisRow];

    static NSString *CellID = @"cu5";

    FancyCell *cell =
       (FancyCell *)[tableView dequeueReusableCellWithIdentifier:CellID];
    if (cell == nil)
        {
        NSArray *cellTeam =
          [[NSBundle mainBundle] loadNibNamed:@"FancyCell"
             owner:self options:nil];
        cell = [cellTeam objectAtIndex:0];
        }

    [cell someFunction:exampleText];
    [cell.someLabel setText:exampleText];
    return cell;
    }

希望可以帮助你:)

于 2012-06-14T05:55:29.077 回答
1

在 .h 文件中,您编写它。

IBOulet CustomTableViewCell *tableCell;

并连接到 CustomTableViewCell 的 .xib 文件中的文件所有者。

你修改这个(UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath

if (cell == nil) 
 {
     [[NSBundle mainBundle] loadNibNamed:@"CustomTableViewCell" owner:self options:nil];
     cell = tableCell;
 }

我想这会对你有所帮助。

于 2012-06-14T04:55:08.240 回答