我将selectedArray定义为我文件中的属性,该属性包含已“检查”的单元格。当显示单元格时,我检查当前单元格值是否在selectedArray中,如果是,我将UITableViewCellAccessoryCheckmark显示为表格的附件视图。
唯一的问题是,当用户使用UISearchBar通过UITableView搜索时,我要求表在完成搜索时重新加载数据,并且在numberofRows方法中,我在selectedArray中看到了正确数量的对象。但是,cellForRowatIndexPath方法仍然显示旧的复选标记,就好像selectedArray从未更新过一样。
任何人都可以帮助我吗?这是我的代码 -
NSArray *tempArray = [[NSArray alloc] init];
if(tableView == theTable) {
tempArray = [contactsArray objectAtIndex:indexPath.row];
} else {
tempArray = [searchfor_array objectAtIndex:indexPath.row];
}
NSString *cellValue = [tempArray objectAtIndex:0];
static NSString *CellIdentifier;
CellIdentifier = cellValue;
UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:CellIdentifier];
if (cell == nil) {
cell = [[[UITableViewCell alloc] initWithStyle:UITableViewCellStyleDefault reuseIdentifier:CellIdentifier] autorelease];
UILabel *name = [[UILabel alloc] initWithFrame:CGRectMake(70, 30, 200, 20)];
name.text = [tempArray objectAtIndex:0];
name.backgroundColor = [UIColor clearColor];
[name setFont:[UIFont fontWithName:@"Helvetica-Bold" size:18]];
[cell.contentView addSubview:name];
[name release];
if([selectedArray containsObject:[tempArray objectAtIndex:0]]) {
cell.accessoryType = UITableViewCellAccessoryCheckmark;
}
}
return cell;
[cell release];
[tempArray release];
[cellValue release];
答案 0 :(得分:1)
看起来好像你正在设置一次单元格并重复使用它。单步执行代码,您应该看到仅在第一次加载单元格时才输入if
块。
您需要调整每行的单元格,如下所示:
if (cell == nil) {
// Initialize cell.
cell = [[[UITableViewCell alloc] initWithStyle:UITableViewCellStyleDefault reuseIdentifier:CellIdentifier] autorelease];
}
// Adjust cell for each row.
if([selectedArray containsObject:[tempArray objectAtIndex:0]]) {
cell.accessoryType = UITableViewCellAccessoryCheckmark;
}
答案 1 :(得分:0)
加入贾斯汀的回答 -
您应该仅在if(cell == nil)部分添加标签。您处理该语句的附件视图OUTSIDE。这是它应该是什么样的 -
if (cell == nil) {
cell = [[[UITableViewCell alloc] initWithStyle:UITableViewCellStyleDefault reuseIdentifier:CellIdentifier] autorelease];
UILabel *name = [[UILabel alloc] initWithFrame:CGRectMake(70, 30, 200, 20)];
name.text = [tempArray objectAtIndex:0];
name.backgroundColor = [UIColor clearColor];
[name setFont:[UIFont fontWithName:@"Helvetica-Bold" size:18]];
[cell.contentView addSubview:name];
[name release];
}
if([selectedArray containsObject:[tempArray objectAtIndex:0]]) {
cell.accessoryType = UITableViewCellAccessoryCheckmark;
} else {
cell.accessoryType = UITableViewCellAccessoryNone;
}