在UITable的行中设置多个UILabel

时间:2012-08-27 05:42:52

标签: objective-c ios uitableview uilabel

我想在表格行中设置UILabel,但问题是,当应用重新启动时,每次标签数量不同。 清除我想要创建具有动态行和列的表的更多细节。行是自己设置的,但是在列中我设置了标签也是动态的,那么每次新的Web服务调用时如何设置该标签?

实施例

行/列

A1 b11 b12 ....... b1n

A2 b21 b22 ....... b2n

A3 b31 b32 ....... b3n

Am bm1 bm2 ....... bmn

其中A是行或 b是列

5 个答案:

答案 0 :(得分:1)

例如,你可以有一个名为rowData的可变数组。在init / initWithCoder / etc方法中,您可以创建另一个名为columnData的可变数组,例如可以包含每个标签的数据。将每行的columnData对象添加到rowData。

对于你的cellForRowAtIndexPath方法,你可以这样做:

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

if (!cell) {
    cell = [[[UITableViewCell alloc] initWithStyle:UITableViewCellStyleDefault reuseIdentifier:@"cell"] autorelease];

    int row = [indexPath row];
    int i = 0;
    int nLabels = [[rowData objectAtIndex:row] count];
    UILabel *label;

    NSLog([NSString stringWithFormat:@"%d labels", nLabels]);

    for (i = 0; i < nLabels; i++) {
        NSLog([NSString stringWithFormat:@"%d", i]);
        label = [[[UILabel alloc] initWithFrame:CGRectMake(cell.frame.origin.x + (i * 40), cell.frame.origin.y, 40, cell.frame.size.height)] autorelease]; //replace 40 with desired label width
        label.textColor = [UIColor grayColor];
        label.backgroundColor = [UIColor clearColor];
        // set the label text here

        [cell.contentView addSubview:label];

        NSLog([NSString stringWithFormat:@"%d subviews", [[cell.contentView subviews] count]]);
    }
}

return cell;

}

答案 1 :(得分:1)

更好的选择只是在UITableViewCell中创建一个UITableView,你的每个标签都是单元格,你可以禁用内部tableview滚动。但是你需要确保你已经正确计算了内部桌面高度。

添加n个UIlabel等其他解决方案不会让您顺利滚动。

答案 2 :(得分:0)

创建具有您可能需要的最大标签数的单元格。使他们的标签为1,2,3,4 ...... - 增加数字。每次要求您按表格提供单元格时,您可以选择旧单元格或新单元格,确定需要多少标签,使标签范围可见(即label.hidden = NO;),然后隐藏另一个标签。您需要明显更改可见标签的文本。

答案 3 :(得分:0)

您使用tag方法和indexpath.row。

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

            UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:@"cell"];

            if (!cell) {
                      cell = [[UITableViewCell alloc] initWithStyle:UITableViewCellStyleDefault reuseIdentifier:@"cell"];
                      for (i = 0; i < n; i++) {
                              label = [[UILabel alloc] initWithFrame:CGRectMake (i * yourWidth, 0, yourWidth + 5, yourHight)]; 
                              label.textColor = [UIColor blueColor];
                              label.tag = (indexPath.row)*100 + i  //you can create n labels in a row.
                              label.text = [NSString stringWithString:@"%d",label.tag]; 
                              [cell.contentView addSubview:label];
                        }
            }

        return cell;

} 

我认为这会对你有所帮助。

答案 4 :(得分:0)

您应该考虑使用其他视图,例如DTGridView