-1

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

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;
4

6 回答 6

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];

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

于 2012-05-23T07:31:52.583 回答
0

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

只需替换您的代码-

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

有了这个 -

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

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

于 2012-05-23T06:37:56.083 回答
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;

我想这会对你有所帮助。

于 2012-05-23T06:50:24.693 回答
0

在您的tableView:cellForRowAtIndexPath:方法中,首先像这样获取选定的行

NSUInteger row = [indexPath row];

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

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 行)那么你就不会出错。

于 2012-05-23T06:41:36.570 回答
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];
        }
    }
}
于 2012-05-23T07:01:42.123 回答
-1

为了解决这个问题,您可以cell=nil;在检查cell== nil条件之前放置或每次创建单元格。它会起作用,但它不是一个好习惯

这也适用于文本

静态 NSString *CellIdentifier = @"Cell";

UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:CellIdentifier];

单元格=无;

如果(单元格 == 零)

{

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];

[单元集附件类型:UITableViewCellAccessoryDisclosureIndicator];

返回单元格;

于 2012-05-23T06:34:42.420 回答