在显示UITableView时遇到问题

时间:2011-11-06 14:40:59

标签: iphone

请参阅

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

static NSString *SimpleTableIdentifier = @"SimpleTableIdentifier";
UITableViewCell *cell = [tableView
                         dequeueReusableCellWithIdentifier:SimpleTableIdentifier];
if (cell == nil) {
    cell = [[[UITableViewCell alloc]initWithStyle:UITableViewCellStyleDefault
                                  reuseIdentifier:SimpleTableIdentifier] autorelease];




UILabel *playerHeading=[[UILabel alloc ]initWithFrame:CGRectMake(5.0f, 10.0f, 70.0f, 30.0f)];
[playerHeading setBackgroundColor:[UIColor clearColor]];


NSString *str=[NSString stringWithFormat:@"Player %i",indexPath.row];
[playerHeading setText:str];
[playerHeading setFont:[UIFont boldSystemFontOfSize:15]];

if(indexPath.section%2==0){
    playerHeading.textColor=[UIColor redColor];
}
else {
    playerHeading.textColor=[UIColor blueColor];

}

UITextField *txt=[[UITextField alloc]initWithFrame:CGRectMake(80.0f, 13.0f, 170.0f, 30.0f)];
[txt setBackgroundColor:[UIColor clearColor]];


//[txt setBackgroundColor:[UIColor whiteColor]];
[txt setTextColor:[UIColor grayColor]];
txt.delegate=self;
//[txt setBorderStyle:UIBorderStyle ]
[txt setText:@"Enter Player name"];
//txt.layer.cornerRadius=8.0f;
   //   txt.layer.masksToBounds=YES;
//txt.layer.borderColor=[[UIColor redColor]CGColor];
   //   txt.layer.borderWidth= 1.0f;

[cell.contentView addSubview:txt];

[cell.contentView addSubview:playerHeading];

[cell.contentView setAlpha:0.8f];
//ce]ll.textLabel.text = [listData objectAtIndex:row];
}
return cell;

}

我想按照播放器0,播放器1,播放器2的顺序显示数字...... 但是当我滚动表格时,我会得到随机格式的数字,如播放器1,播放器0,播放器3 请帮助解决这个问题。

2 个答案:

答案 0 :(得分:1)

您始终将标签添加为新的子视图 - 这意味着您将在标签上方标签上方标签,这会浪费内存以及显示问题的潜在来源。

创建单元格时(在if (cell == nil)内创建并添加子视图,并为每个子视图分配一个标记。然后在该循​​环外部配置它们。仅使用playerHeading标签的示例:

UILabel *playerHeading;

if (cell == nil)
{
    cell = [[[UITableViewCell alloc]initWithStyle:UITableViewCellStyleDefault
                              reuseIdentifier:SimpleTableIdentifier] autorelease];
    playerHeading=[[UILabel alloc ]initWithFrame:CGRectMake(5.0f, 10.0f, 70.0f, 30.0f)];
    [playerHeading setBackgroundColor:[UIColor clearColor]];
    [playerHeading setFont:[UIFont boldSystemFontOfSize:15]];
    [playerHeading setTag:1];
    [cell.contentView addSubview:playerHeading];
}
else
{
    playerHeading = [cell.contentView viewWithTag:1];
}

playerHeading.text = [NSString stringWithFormat:@"Player %i",indexPath.row];

您的表中似乎有多个部分(indexPath.section上有if语句),因此您的播放器编号将在每个部分中使用上述代码从0开始。

答案 1 :(得分:0)

尝试先关闭if(cell == nil)的{},如下所示:

if (cell == nil) {
cell = [[[UITableViewCell alloc]initWithStyle:UITableViewCellStyleDefault
                              reuseIdentifier:SimpleTableIdentifier] autorelease]; 
}