-4

我调试DataArray更改但UITableView仍然没有显示新数据来自DataArray. 这是我的代码:

- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath
{
    NSString *CellIdentifier = [NSString stringWithFormat:@"%d,%d",indexPath.section,indexPath.row];

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

        UILabel *FileNameLabel = [[UILabel alloc] initWithFrame:CGRectMake(10, 0, 100, 30)];
        FileNameLabel.backgroundColor = [UIColor clearColor];
        FileNameLabel.font = [UIFont fontWithName:@"Helvetica" size:16];
        FileNameLabel.font = [UIFont boldSystemFontOfSize:16];
        FileNameLabel.textColor = [UIColor blackColor];
         NSLog(@"File Temp 4 array: %@", temp);
        FileNameLabel.text =[temp objectAtIndex:indexPath.row];
        [cell.contentView addSubview: FileNameLabel];
        [FileNameLabel release];

    }
        return cell;
}

update()在其中发挥作用ViewWillAppear

-(void) update
{
      if([FileCompletedArray count] != [temp count])
      {
            temp = [FileCompletedArray mutableCopy];
            NSLog(@"File Temp 1 array: %@", temp);
            [_tableView reloadData];
            NSLog(@"File Temp 2 array: %@", temp);
       }
}

你有解决办法吗?

4

3 回答 3

1

这是一个单元重用问题,因为您设置单元格文本 ( FileNameLabel.text =[temp objectAtIndex:indexPath.row];) 的代码仅在您创建新单元格实例时运行。

您需要区分创建新单元格时需要哪些设置,以及重用/准备显示单元格时需要哪些设置。

于 2013-07-04T11:34:03.783 回答
1

调用 reloadData 后,cellForRowAtIndexPath 会再次被调用,但由于单元格已经创建,tableview 将重用单元格,因此这里正确的方法是获取单元格内的标签并在if(cell == nil)块外更新其文本。我已经修改了您的代码,下面给出了更新的代码。

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

    UILabel *FileNameLabel = [[UILabel alloc] initWithFrame:CGRectMake(10, 0, 100, 30)];
    FileNameLabel.tag = 1000;
    FileNameLabel.backgroundColor = [UIColor clearColor];
    FileNameLabel.font = [UIFont fontWithName:@"Helvetica" size:16];
    FileNameLabel.font = [UIFont boldSystemFontOfSize:16];
    FileNameLabel.textColor = [UIColor blackColor];
     NSLog(@"File Temp 4 array: %@", temp);
    [cell.contentView addSubview: FileNameLabel];
    [FileNameLabel release];

}


UILabel *fileNameLbl = (UILabel*)[cell.contentView viewWithTag:1000];
fileNameLbl.text =[temp objectAtIndex:indexPath.row];

请检查这是否解决了您的问题。

于 2013-07-04T11:37:53.953 回答
0

如果您有不同的部分,则使用以下代码将值分配给FileNameLabel

FileNameLabel.text =[[temp objectAtIndex:indexPath.section] objectAtIndex:indexPath.row];
于 2013-07-04T12:14:33.463 回答