在我的uitableview中,我有两个部分
首先从核心数据中提取
other通过文本字段添加,存储在NSMutableArray(otherFriends)
中这是我的代码
- (NSInteger)numberOfSectionsInTableView:(UITableView *)tableView
{
if([otherFriends count]>0)
{
return 2;
}
return 1;
}
- (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)sectionIndex
{
if(otherFriends == 0)
{
return [[[[self fetchedResultsController]sections]objectAtIndex:0]numberOfObjects];
}
return [otherFriends count];
}
- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath
{
static NSString *CellIdentifier = @"newGroupCell";
UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:CellIdentifier];
if (cell == nil)
{
cell = [[UITableViewCell alloc] initWithStyle:UITableViewCellStyleSubtitle reuseIdentifier:CellIdentifier];
}
cell.textLabel.font = [UIFont fontWithName:@"Helvetica-Light" size:20.0];
cell.textLabel.backgroundColor = [UIColor colorWithWhite:1.0f alpha:0.0f];
if(indexPath.section == 0)
{
user = [[self fetchedResultsController] objectAtIndexPath:indexPath];
cell.textLabel.text = user.name;
cell.detailTextLabel.text = user.primaryResource.status;
[cell.imageView setFrame:CGRectMake(0, 0, 50, 50)];
[cell.imageView.layer setMasksToBounds:YES];
if (user.photo != nil)
{
cell.imageView.image = user.photo;
}
else
{
cell.imageView.image = [UIImage imageNamed:@"defaultPerson"];
}
}
else
{
cell.textLabel.text = [otherFriends objectAtIndex:indexPath.row];
cell.imageView.image = [UIImage imageNamed:@"defaultPerson"];
}
return cell;
}
第一部分也有字幕,但第二部分单元格没有字幕
当我添加新朋友时它工作正常直到所有行都可见,但是当添加新朋友并且该行不可见并且要查看该行时我必须滚动,那么此行显示第0部分中第一行的副标题(第一个单元格)并在第1节第3行重复。只有副标题重复,但主要文字不重复。
几个小时我想弄清楚但没有运气。
答案 0 :(得分:2)
这是因为在else
分支机构中,您没有设置cell.detailTextLabel.text
。
当一个单元格被回收时,旧的detailTextLabel就会停留在那里。您需要在条件1的两个分支中设置单元格的所有属性,以及它被回收的可能性。
if(indexPath.section == 0)
{
user = [[self fetchedResultsController] objectAtIndexPath:indexPath];
cell.textLabel.text = user.name;
cell.detailTextLabel.text = user.primaryResource.status;
[cell.imageView setFrame:CGRectMake(0, 0, 50, 50)];
[cell.imageView.layer setMasksToBounds:YES];
if (user.photo != nil)
{
cell.imageView.image = user.photo;
}
else
{
cell.imageView.image = [UIImage imageNamed:@"defaultPerson"];
}
}
else
{
cell.textLabel.text = [otherFriends objectAtIndex:indexPath.row];
cell.imageView.image = [UIImage imageNamed:@"defaultPerson"];
// ADDED
cell.detailTextLabel.text = @"";
// You may also need to adjust the frame of the cell.imageView
// because it could have been recycled.
}
答案 1 :(得分:0)
细胞被重复使用。由于您对两个部分使用相同的单元格,因此必须确保在所有条件下设置/重置相同的单元格属性集。
问题是当单元格用于第1部分时,您不会重置detailTextLabel
。在else
块中,添加:
cell.detailTextLabel.text = nil;
这可确保您在所有情况下都为重复使用的单元格设置textLabel
,detailTextLabel
和imageView
属性。