2

首先,对不起我的英语,我是法国人:)

就像标题中所说的那样,我想在 ipad 上的一个简单的 tableview 中放置一个自定义 tableviewcell。这是必要的,因为我想生成一个带有 5 个标签的表格。

UITableViewCell我使用带有 NIB的单独类。

这是我的代码:

- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath
{   
    static NSString *CellIdentifier = @"CellIdentifier";

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

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

    cell.accessoryType = UITableViewCellAccessoryDisclosureIndicator;
    [self configureCell:cell atIndexPath:indexPath];

    NSString *rowLabelEcheance = [[NSString alloc] initWithFormat:@"%@", [contentsList objectAtIndex:indexPath.row]];
    [customTableCell.labelEcheance setText:rowLabelEcheance];

    NSString *rowLabelCapitalRestantDu = [[NSString alloc] initWithFormat:@"%@", >>>>>>>  [contentsList2 objectAtIndex:indexPath.row]];
    [customTableCell.labelCapitalRestantDu setText:rowLabelCapitalRestantDu];

    NSString *rowLabelInterets = [[NSString alloc] initWithFormat:@"%@", [contentsList3 objectAtIndex:indexPath.row]];
    [customTableCell.labelInterets setText:rowLabelInterets];

    NSString *rowLabelAmortissement = [[NSString alloc] initWithFormat:@"%@", >[contentsList4 objectAtIndex:indexPath.row]];
    [customTableCell.labelAmortissement setText:rowLabelAmortissement];

    NSString *rowLabelMontant = [[NSString alloc] initWithFormat:@"%@", [contentsList5 objectAtIndex:indexPath.row]];
    [customTableCell.labelMontant setText:rowLabelMontant];

    return cell;
}

你能帮助我吗 ?我花了8个小时来解决这个问题......

谢谢 !

4

2 回答 2

1

如果其他人有这个问题,你可以在这里下载一个工作示例项目:https ://github.com/ijoshsmith/CustomCellDemo

否则,这里是说明:

我知道有几种方法可以做到这一点。

假设以下名称和文件结构

-UITableCellCustomClass.h
-UITableCellCustomClass.m
-UITableCellCustomClass.xib
-UITableViewClass.h 
-UITableViewCustomClass.m
-UITableViewCustomClass.xib 

使用 Interface Builder,要创建自定义表格单元格,您需要执行以下操作:

1.)从继承自 UITableViewCell 的NIB(如您所做的那样)创建一个自定义表格单元格

2.) 在 IB 中为您的自定义表格单元格类取消挂钩“文件的所有者”,并将其指向您希望单元格出现的表格类,例如将其更改为 UITableViewCustomClass。

3.) 在您的 IB 屏幕中单击表格单元格并转到显示 UITableViewCell 的字段并将其更改为从您的自定义表格单元格类继承,例如 UITableCellCustomClass

4.)确保您已经为您的文本字段创建了所有字段和属性以及出口,并在您的表格单元格类和自定义单元格 xib 中的单元格之间的 interfacebuilder 中建立了必要的连接(注意:不是文件的所有者...... )

5.) 我看到您那里有“单元标识符”变量...但以防万一您还没有,请确保在您的 CustomTableCell xib 中您已更改单元标识符字段以匹配您的自定义标识符。

如果我的记忆正确的话,我相信应该这样做。看起来您正在使用表格完成其余的工作并在单元格上设置属性。

我相信这就是全部。我已经在某处明确详细地写下了它,因为它是如此痛苦。

更新:

如果您有五个标签,您可能需要更改表格行的垂直高度,以便显示所有标签(除非您有一个非常宽的表格)。

确保表的委托和数据源都指向它的父类(承载单元加载逻辑的那个)

您必须重写此函数:

- (CGFloat)tableView:(UITableView *)tableView heightForRowAtIndexPath:(NSIndexPath *)indexPath
{

        return YOURCUSTOMROWHEIGHT;
}

更新:显然以上还不够,所以我会再试一次:

尝试使用以下 UINib 方法执行此操作:

将此添加到您的 UICustomTableView.h 类

UINib *cellLoader;

接下来,尝试以下操作(假设您遵循了上述所有步骤)...也许 UINib 加载器会有所帮助?在查看我的笔记后,我很确定我已经涵盖了所有正确的步骤。要尝试的一件事是创建一个扩展 UIViewController 的类,然后从中删除视图,添加表格单元格并执行上述步骤并将基类更改为从 UITableCellView 继承。

static NSString *CellClassName = @"YourCellClassName";

- (id)initWithStyle:(UITableViewStyle)style
{
    self = [super initWithStyle:style];
    if (self) 
    {
        cellLoader = [[UINib nibWithNibName:CellClassName bundle:[NSBundle mainBundle]] retain];
    }
    return self;
}

- (UITableViewCell *)tableView:(UITableView *)tableView 
     cellForRowAtIndexPath:(NSIndexPath *)indexPath
{
    // Make sure your identifier is set properly in IB
    CustomCellClass *cell = (CustomCellClass *)[tableView     dequeueReusableCellWithIdentifier:CellClassName];
    if (!cell)
    {
        NSArray *topLevelItems = [cellLoader instantiateWithOwner:self options:nil];
        cell = [topLevelItems objectAtIndex:0];
    }
     /* set your cell properties here */



    return cell;
}
于 2011-08-10T07:31:40.067 回答
0

使用这段简单的代码:

...
if(cell == nil){
   NSArray *nib = [[NSBundle mainBundle] loadNibNamed:@"MyCellView" owner:self options:nil];
   cell = (MyCellView *) [nib objectAtIndex:0];
}
...
于 2012-07-11T13:01:09.510 回答