我调试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);
}
}
你有解决方案吗?
答案 0 :(得分:1)
这是一个单元重用问题,因为您设置单元格文本的代码(FileNameLabel.text =[temp objectAtIndex:indexPath.row];
)仅在您创建新单元格实例时运行。
您需要区分创建新单元格时需要的设置以及重用/准备显示单元格时所需的设置。
答案 1 :(得分:1)
在调用reloadData之后,将再次调用cellForRowAtIndexPath,但由于已经创建了单元格,因此tableview将重用该单元格,因此这里正确的方法是在单元格内部获取标签并在{I}之外更新其文本{1}}阻止。我修改了你的代码并在下面给出了更新的代码。
if(cell == nil)
请检查这是否能解决您的问题。
答案 2 :(得分:0)
如果您有不同的部分,请将下面的代码值分配给FileNameLabel
FileNameLabel.text =[[temp objectAtIndex:indexPath.section] objectAtIndex:indexPath.row];