UITableView не обновляется соответствующим образом - PullRequest
0 голосов
/ 11 августа 2010

У меня есть selectedArray, определенный как свойство в моем файле, который содержит, какие ячейки были «проверены». При отображении ячейки я проверяю, находится ли текущее значение ячейки в selectedArray, и если это так, я отображаю UITableViewCellAccessoryCheckmark в качестве вспомогательного представления таблицы.

Единственная проблема заключается в том, что когда пользователь выполняет поиск через UITableView с помощью UISearchBar, я запрашиваю у таблицы reloadData после завершения поиска, и в методе 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 ]

1 голос
/ 11 августа 2010

Похоже, вы настраиваете ячейку один раз и используете ее снова.Пройдите по коду и вы увидите, что блок 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;
}
0 голосов
/ 11 августа 2010

Добавление к ответу Джастина -

Вы должны добавлять метку только в части if (cell == nil). Вы обрабатываете вспомогательный вид ВНЕ этого заявления. Вот как это должно выглядеть -

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;
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...