在iPhone上的uitableviewcell上创建标签?

时间:2012-12-29 12:00:39

标签: objective-c ios json

我是iPhone devlopemnt的新手我正在开发一个应用程序。在该应用中,我需要在UITableView中显示列表项目及其各自的价格。为了解决这个问题,我遵循一些概念,比如在UITableViewCell中动态创建标签,以显示项目及其价格。

在应用程序中,第一个indexid == 1表示我在列表上的特定单元格上显示列表位置是最喜欢的项目列表,其价格意味着indexid = 2 ...单击后退按钮indexid = 1然后我需要隐藏那个标签......但标签没有隐藏它显示列表价格而不是项目列表

lblText.text = nil;
btnBack.hidden = FALSE;
static NSString *CellIdentifier = @"Cell";

UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:CellIdentifier];
if (cell == nil)
{     
     cell = [[[UITableViewCell alloc] initWithStyle:UITableViewCellStyleDefault reuseIdentifier:CellIdentifier] autorelease];
     cell.textLabel.font = [UIFont boldSystemFontOfSize:14.0];
     cell.textLabel.highlightedTextColor = [UIColor orangeColor];

}

    /////////////////////   Cell Title    /////////////////////
    if (indexId == 1) 
    {
//        NSLog(@"%@",lblText1);
       cell.textLabel.text = [NSString stringWithFormat:@"%@", [test.arrTitle objectAtIndex:indexPath.row]];
        lblText = [[UILabel alloc] initWithFrame:CGRectMake(250, 7, 40, 30)]; // For right alignment
        lblText.text = [test.arrId objectAtIndex:indexPath.row];
        [lblText setTextAlignment:UITextAlignmentCenter];
        lblText.textColor = [UIColor redColor];
        lblText.backgroundColor = [UIColor clearColor];
        [cell addSubview:lblText];

       cell.backgroundView = [[UIImageView alloc] initWithImage:[UIImage imageNamed:@"products-category-bg.png"]];
        cell.selectionStyle = UITableViewCellSelectionStyleNone;
        [lblText release];

    }
    else
    {
        lblText.hidden = YES;
        cell.textLabel.text = [NSString stringWithFormat:@"  %@", [test.arrTitle objectAtIndex:indexPath.row]];        

            cell.backgroundView = [[UIImageView alloc] initWithImage:[UIImage imageNamed:@"product-bg-hover.png"]];
    }       
    return cell;
}

我有以下问题。标签创建正常,但在单击后退按钮后,我在主表视图中获得标签值。

如何使用数据发布标签对象?

谢谢&问候

请帮我解决这个问题

3 个答案:

答案 0 :(得分:0)

您的代码对我来说很合适,只需将上面代码中的一行替换为下面的链接

即可
[cell.contentView addSubview:lblText];

相反

[cell addSubview:lblText];

希望它能解决您的问题。

答案 1 :(得分:0)

如果您为应用程序中的不同状态使用相同的表视图实例,那么您还将重新使用先前创建的单元格:

UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:CellIdentifier];

对于每个单元格,当您indexid == 1执行此操作时:

[cell addSubview:lblText];

对我而言,这表示您创建的每个单元格(并且将被重复使用)都会添加UILabel作为子视图。要真正重复使用该单元格,您需要在逻辑表明需要再次添加之前删除UILabel。当您不需要它时,它不仅会删除单元格,还会阻止您在运行时向单元格添加额外的UILabel实例。在检查indexid

之前,请尝试添加以下代码
if (cell == nil)
{     
     cell = [[[UITableViewCell alloc] initWithStyle:UITableViewCellStyleDefault reuseIdentifier:CellIdentifier] autorelease];
     cell.textLabel.font = [UIFont boldSystemFontOfSize:14.0];
     cell.textLabel.highlightedTextColor = [UIColor orangeColor];
}

// Be sure to remove the UILabels on the re-used cell.
for(UIView *view in cell.subviews)
    if ([view isKindOfClass:([UILabel class])])
        [view removeFromSuperview];

if (indexid == 1) { ....

每次创建单元格时都会删除UILabel,允许您有条件地将其重新添加为子视图。

答案 2 :(得分:0)

尝试为您的标签设置标签(将帮助您将数据设置为标签,您可以通过调用

获取标签
  

[cell viewWithTag:theLabelTag]

其中theLabelTag标记可以是索引) 并在

中设置标签值
tableView: willDisplayCell: forRowAtIndexPath:

而不是

  

tableView:cellForRowAtIndexPath: