UITableView AccessoryView повторно используется в нескольких ячейках

У меня есть TableView, в котором я хотел бы добавить галочку в строку при нажатии. Для этого у меня есть:

- (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath {

        NSString *selectedCountry = [self.files objectAtIndex:indexPath.row];
        NSString *Documents = [[NSBundle mainBundle] pathForResource:selectedCountry ofType:@"ppt" inDirectory:@"thepowerpoints"];
        //NSLog(@"%@", selectedCountry);
        UITableViewCell *newCell = [tableView cellForRowAtIndexPath:indexPath];

        if (newCell.accessoryType == UITableViewCellAccessoryNone) {
            if (self.chosen == nil) {
                self.chosen = [[NSMutableArray alloc] init];
            }
            newCell.accessoryType = UITableViewCellAccessoryCheckmark;
            [self.chosen addObject:Documents];
             NSLog(@"%@", self.chosen);

        }else {
            newCell.accessoryType = UITableViewCellAccessoryNone;
            [self.chosen removeObject:Documents];
        }

        [self.tableView deselectRowAtIndexPath:indexPath animated:YES];


}

Я так понимаю, что это происходит из-за dequeueReusableCellWithIdentifier в типе Cell. Мой вопрос в том, что я могу изменить, чтобы только те строки, на которые нажали, получали галочку, а не все эти другие ячейки, как только они начнут повторно использоваться?


person user717452    schedule 10.12.2015    source источник
comment
Вы пытались установить для дополнительного представления значение none для других ячеек в ячейке для строки в методе индекса?   -  person Teja Nandamuri    schedule 10.12.2015
comment
Возможный дубликат проблемы с галочкой в ​​виде таблицы для iphone   -  person Nakib    schedule 10.12.2015


Ответы (1)


Переместите код, который решает, следует ли проверять ячейку, в cellForRowAtIndexPath. Сохраните ссылку на текущий выбранный индекс/элемент, а затем установите флажок в этой ячейке. Вы бы установили невыбранные ячейки, чтобы для вспомогательного представления не было установлено значение none.

person CrimsonChris    schedule 10.12.2015
comment
Итак, вы говорите, что в didSelect установите, возможно, BOOLEAN значение для этой ячейки, а в cellForRowAtIndexPath есть оператор if/else, ищущий это BOOLEAN значение для конкретной ячейки? - person user717452; 10.12.2015
comment
Не ставьте флаг на ячейку, помните, что она используется повторно. Поместите выбранное свойство индекса в контроллер представления и установите его в didSelect. - person CrimsonChris; 10.12.2015