从iOS中的json动态创建UITableView中的UILabels?

Posted

技术标签:

【中文标题】从iOS中的json动态创建UITableView中的UILabels?【英文标题】:Dynamically create UILabels in UITableView from a json in iOS? 【发布时间】:2016-06-15 05:49:22 【问题描述】:

我正在尝试创建此设计

来自以下 json

 details =     (
                (
                        
                subtitle = "One";
                title = 1;
            ,
                        
                subtitle = "two";
                title = "2";
            ,
                        
                subtitle = "three";
                title = "3";
            
        ),
                (
                        
                subtitle = "one_two";
                title = "1_2";
            ,
                        
                subtitle = "two_two";
                title = "2_2";
            
        )
    );

我尝试了以下代码,但没有显示任何 UILables

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

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

        NSUInteger row = [indexPath row];
        int i = 0;
        NSUInteger nLabels = [[mainArray objectAtIndex:indexPath.row ] count];
        UILabel *label;
        float x =self.tableView.frame.size.width/nLabels;

        for (i = 0; i < nLabels; i++) 
            label = [[UILabel alloc] initWithFrame:CGRectMake(10 + (i * x), cell.frame.origin.y, 40, cell.frame.size.height)] ; //replace 40 with desired label width
            label.textColor = [UIColor grayColor];
            label.backgroundColor = [UIColor clearColor];
            // set the label text here
            label.text=@"treWT";
            [label setNumberOfLines:0];
            [label setAdjustsFontSizeToFitWidth:YES];
            [cell.contentView addSubview:label];

        
    

    return cell;

现在我可以用这种方式看到模拟器了

仍然没有对齐 请帮助我

【问题讨论】:

nLabels的值是多少? temp i 这样的硬编码值 " label.text=@"treWT"; ' 首先添加调试以查看您的单元格是否为零。如果它不为零,则永远不会调用配置单元代码请将配置单元的代码粘贴到if (!cell) 子句之外。它不会运行里面的代码,因为单元格不是 nil 。 为什么人们会忽略弃用警告?有一个出列方法可以保证返回一个单元格。使用它! 【参考方案1】:

试试下面的标签对齐代码:

    NSUInteger row = [indexPath row];
    int i = 0;
    NSUInteger nLabels = [[mainArray objectAtIndex:indexPath.row ] count];
    UILabel *label;
    float w =self.tableView.frame.size.width/nLabels;
    float x = 0; 

    for (i = 0; i < nLabels; i++) 
        label = [[UILabel alloc] initWithFrame:CGRectMake(x, cell.frame.origin.y, w, cell.frame.size.height)] ; //replace 40 with desired label width
        label.textColor = [UIColor grayColor];
        label.backgroundColor = [UIColor clearColor];
        // set the label text here
        label.text=@"treWT";
        [label setNumberOfLines:0];
        [label setAdjustsFontSizeToFitWidth:YES];
        label.textAlignment = NSTextAlignmentCenter;
        [cell.contentView addSubview:label];
         x += w;
    

【讨论】:

@Bangalore 继续加油兄弟:P【参考方案2】:

删除if(!cell),因为单元格不是nil。它不会执行条件。

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

   cell = [[UITableViewCell alloc] initWithStyle:UITableViewCellStyleDefault reuseIdentifier:@"cell"] ;

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


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

    


return cell;

【讨论】:

但是如何对齐它们? 标签没有显示,因为我在 ui 中添加了自定义标签 但是在您的代码中添加了 UILabel,自定义标签在哪里? 在情节提要中错误地添加了另一个单元格

以上是关于从iOS中的json动态创建UITableView中的UILabels?的主要内容,如果未能解决你的问题,请参考以下文章

iOS JSON 从 web 解析到 UITableView

尝试在用户向 iOS 中的 UITableView 添加行时动态增加 UITableView 的高度

iOS:从 UITableView 动态添加数据到 NSArray

从 Json Array 在 UITableView 上显示图像

从Unix时间戳日期ios数组在Uitableview中创建动态部分?

如何以编程方式从情节提要中填充静态 UITableView?