如何控制我的tableview单元格标签?

时间:2012-05-23 06:24:00

标签: iphone objective-c ios ios5

我是iPhone开发的新手。我正在开发一个应用程序,其中包含带有标签的tableview。对于我已经完成的每个单元格行,我为每行设置了不同的标签,就像这样if(indexpath.row == 0)。但是,当我滚动tableview时,我的标签变得混杂了。请帮帮我!

static NSString *CellIdentifier = @"Cell";

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

if (indexPath.row == 2)
{
    pendingListNumberLabel = [[UILabel alloc] init];
    pendingListNumberLabel.font = [UIFont fontWithName:@"Helvetica" size:14];
    pendingListNumberLabel.textAlignment = UITextAlignmentLeft ;
    pendingListNumberLabel.textColor = [UIColor orangeColor];
    pendingListNumberLabel.frame = CGRectMake(240, 6, 110, 30);
    [pendingListNumberLabel setBackgroundColor:[UIColor clearColor]];
    [cell addSubview:pendingListNumberLabel];
}

cell.textLabel.text = [affiliationsArray objectAtIndex:indexPath.row];
[cell setAccessoryType:UITableViewCellAccessoryDisclosureIndicator];
return cell;

6 个答案:

答案 0 :(得分:0)

这种情况正在发生,因为您正在使用可重复使用的单元而不是正确的方式。

只需替换您的代码 -

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

用这个 -

UITableViewCell *cell = [[UITableViewCell alloc] init];

上面的代码可以解决您的问题,但是如果有大量的单元格则这不好。在这种情况下,您应该使用可重复使用的单元格。

答案 1 :(得分:0)

tableView:cellForRowAtIndexPath:方法中,首先获取所选行

NSUInteger row = [indexPath row];

然后使用“row”从对应于tableView行的NSArray中获取数据,并将其分配给单元格的textLabel文本属性,如下所示

NSString *string = [NSString stringWithFormat:@"%@",self.allItems objectAtIndex:row];
cell.textLabel.text = string;
return cell;

当然,您已经创建了一个带有重用标识符的UITableViewCell,如下所示:

static NSString *TableIdentifier = @"TableIdentifier";

UITableViewCell *cell = [tv dequeueReusableCellWithIdentifier:TableIdentifier];
if (cell == nil) {
    cell = [[UITableViewCell alloc]
            initWithStyle:UITableViewCellStyleValue1
            reuseIdentifier:TableIdentifier];
}

密钥使用的数组与表行完全对应。 (即 - 数组中的第0项对应于tableView中的第0行),那么你就不会出错。

答案 2 :(得分:0)

if (cell == nil)
{
    cell = [[[UITableViewCell alloc] initWithStyle:UITableViewCellStyleDefault  reuseIdentifier:CellIdentifier] autorelease];
}
else
        {
            UILabel *titleLbl = (UILabel *)[cell viewWithTag:1];
            [titleLbl removeFromSuperview];
        }

if (indexPath.row == 2)
{
    pendingListNumberLabel = [[UILabel alloc] init];
    pendingListNumberLabel.font = [UIFont fontWithName:@"Helvetica" size:14];
    pendingListNumberLabel.textAlignment = UITextAlignmentLeft ;
    pendingListNumberLabel.textColor = [UIColor orangeColor];
    pendingListNumberLabel.tag = 1;// Write here.....................................
    pendingListNumberLabel.frame = CGRectMake(240, 6, 110, 30);
    [pendingListNumberLabel setBackgroundColor:[UIColor clearColor]];
    [cell addSubview:pendingListNumberLabel];
}

cell.textLabel.text = [affiliationsArray objectAtIndex:indexPath.row];
[cell setAccessoryType:UITableViewCellAccessoryDisclosureIndicator];
return cell;

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

答案 3 :(得分:0)

您正在将UILabel添加为子视图,这是错误。 通常你会使用自定义的UITableViewCell来做这种事情,但是快速解决这个问题:

if (indexPath.row == 2)
{
    pendingListNumberLabel = [[UILabel alloc] init];
    pendingListNumberLabel.font = [UIFont fontWithName:@"Helvetica" size:14];
    pendingListNumberLabel.textAlignment = UITextAlignmentLeft ;
    pendingListNumberLabel.textColor = [UIColor orangeColor];
    pendingListNumberLabel.frame = CGRectMake(240, 6, 110, 30);
    [pendingListNumberLabel setBackgroundColor:[UIColor clearColor]];
    pendingListNumberLabel.tag = 1337
    [cell addSubview:pendingListNumberLabel];
} else {
    for (UIView * subView in [cell subviews]) {
        if ([subView tag] == 1337) {
            [subView removeFromSuperview];
        }
    }
}

答案 4 :(得分:0)

您可以通过省略if (cell == nil)检查来解决标签混合的问题。使用以下代码:

static NSString *CellIdentifier = @"Cell";

UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:CellIdentifier];
//if (cell == nil) // Need not this checking 
cell = [[[UITableViewCell alloc] initWithStyle:UITableViewCellStyleDefault reuseIdentifier:CellIdentifier] autorelease];

如上所述直接使用单元格分配:)

答案 5 :(得分:-1)

要解决此问题,您可以在检查cell=nil;条件之前添加cell== nil或每次创建单元格。它会起作用,但不好习惯

这也适用于文本

static NSString * CellIdentifier = @" Cell&#34 ;;

UITableViewCell * cell = [tableView dequeueReusableCellWithIdentifier:CellIdentifier];

cell = nil;

if(cell == nil)

{

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

}

if(indexPath.row == 2) {

pendingListNumberLabel = [[UILabel alloc] init];

pendingListNumberLabel.font = [UIFont fontWithName:@"Helvetica" size:14];

pendingListNumberLabel.textAlignment = UITextAlignmentLeft ;

pendingListNumberLabel.textColor = [UIColor orangeColor];

pendingListNumberLabel.frame = CGRectMake(240, 6, 110, 30);

[pendingListNumberLabel setBackgroundColor:[UIColor clearColor]];
[cell addSubview:pendingListNumberLabel];

}

cell.textLabel.text = [affiliationsArray objectAtIndex:indexPath.row];

[cell setAccessoryType:UITableViewCellAccessoryDisclosureIndicator];

返回单元格;