UITableView没有适当刷新

时间:2010-08-11 02:48:39

标签: objective-c iphone uitableview ios4

我将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];

2 个答案:

答案 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;
}