UITableview每行两个数据

时间:2010-12-06 14:42:03

标签: iphone objective-c uitableview

我希望在tableview上的每一行都有两个数据。 类似于最近通话(左侧是名称,右侧是当天)

这是我的代码:

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

static NSString *CellIdentifier = @"Cell";

UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:CellIdentifier];
if (cell == nil) {
    cell = [[[UITableViewCell alloc] initWithStyle:UITableViewCellStyleValue1 reuseIdentifier:CellIdentifier] autorelease];
    //cell.selectionStyle = UITableViewCellStyleValue1 ;
}

// Configure the cell.

NSDictionary *dictionary = [listaOggetti objectAtIndex:indexPath.section];
NSArray *array = [dictionary objectForKey:@"Elementi"];
NSString *cellValue = [array objectAtIndex:indexPath.row];
NSArray *array1  = [dictionary objectForKey:@"Tipo"];
NSString *cellDetail = [array1 objectAtIndex:indexPath.row];

if ([indexPath row] == 0){
    cell.textLabel.text = cellValue;
    cell.textAlignment = UITextAlignmentCenter;
    cell.backgroundColor = [UIColor blueColor];
    cell.font = [UIFont systemFontOfSize:13];
} else {

cell.textLabel.text = cellDetail;
cell.detailTextLabel.text = cellValue;
}

return cell;
}

我试图在

上使用不同的风格
initWithStyle

没有任何结果(仅在右侧显示我的详细文字)。 在NSLOG中,我看到了cellDetail的正确值。

{
    Elementi =         (
        "Chiamate e Videochiamate Nazionali",
        "08m:43s",
        "1h:31m:17s",
        "1h:40m:00s"
    );
},
    {
    Tipo =         (
        Effettuato,
        Rimanente,
        Totale
    );
},
    {
    Elementi =         (
        "SMS e MMS Nazionali",
        21,
        29,
        50
    );
},
    {
    Tipo =         (
        Effettuato,
        Rimanente,
        Totale
    );
},
    {
    Elementi =         (
        "Traffico Dati FMM",
        "69.95 MB",
        "954.05 MB",
        "1024.00 MB"
    );
},
    {
    Tipo =         (
        Effettuato,
        Rimanente,
        Totale
    );
},
    {
    Elementi =         (
        Skype,
        "00m:00s",
        "3h:20m:00s",
        "3h:20m:00s"
    );
},
    {
    Tipo =         (
        Effettuato,
        Rimanente,
        Totale
    );
},
    {
    Elementi =         (
        "WWW3, Yahoo!, Google, eBay e altri servizi",
        "0.00 MB",
        "100.00 MB",
        "100.00 MB"
    );
},
    {
    Tipo =         (
        Effettuato,
        Rimanente,
        Totale
    );
}
)

我的目标是获得这样的细胞:

alt text

3 个答案:

答案 0 :(得分:1)

我相信您需要像这样初始化单元格,在初始化单元格时使用的样式不正确

cell = [[[UITableViewCell alloc] initWithStyle:UITableViewCellStyleSubtitle       
                           reuseIdentifier:CellIdentifier] autorelease];

答案 1 :(得分:1)

我会考虑creating a custom Cell,它很容易做到,如果做得好,它看起来真的很棒。

否则,您的代码看起来没问题,请检查您的标签是否已分配(不是零)。

在旁注中,您的数据集中有多少项?我只问,因为如果它只有1,你就永远不会设置detailTextLabel。

答案 2 :(得分:0)

感谢所有人,我的代码没问题,故障发生在第二个阵列上。 以这种方式解决:

    NSDictionary *dictionary1 = [listaDettaglioOggetti objectAtIndex:indexPath.section];
NSArray *array1  = [dictionary1 objectForKey:@"Tipo"];
NSString *cellDetail = [array1 objectAtIndex:indexPath.row];

最后一个问题:

我会修改每个部分的第一行(修改字体大小,颜色,对齐)。 我认为这样的事情:

    NSInteger sectionRows = [tableView numberOfRowsInSection:[indexPath section]];
    if (sectionRows == 0){
    cell.textLabel.text = cellDetail;
    cell.detailTextLabel.textAlignment = UITextAlignmentCenter;
    cell.detailTextLabel.backgroundColor = [UIColor blueColor];
    cell.detailTextLabel.font = [UIFont systemFontOfSize:13];
    } else {
cell.textLabel.text = cellDetail;
cell.detailTextLabel.text = cellValue;
}

但这并不能产生魔力:D 如果最好打开另一个话题,请告诉我们,或者我们可以继续这里。