Выбор одной строки проверяет отметку другой строки

#ios #uitableview

#iOS #uitableview

Вопрос:

У меня возникает странная проблема с представлением таблицы в iOS. В таблице, когда я нажимаю на строку, я хочу, чтобы отображалась галочка, она отлично работает с приведенным ниже кодом:

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

    if([tableView cellForRowAtIndexPath:indexPath].accessoryType == UITableViewCellAccessoryCheckmark){
        [tableView cellForRowAtIndexPath:indexPath].accessoryType = UITableViewCellAccessoryNone;
    }else{
        [tableView cellForRowAtIndexPath:indexPath].accessoryType = UITableViewCellAccessoryCheckmark;
    }
}
  

Прямо сейчас в моей таблице 11 строк. Когда я нажимаю на 1-ю строку, флажок появляется для 1-й строки (это хорошо), но он также появляется для 10-й строки. Когда я нажимаю на 2-ю строку, появляется 2-я (это хорошо) и 11-я.

У кого-нибудь есть идеи по поводу этой проблемы?

Комментарии:

1. Вы никогда не должны сохранять выбранное состояние в ячейке таблицы, поскольку они используются повторно. Вы должны сохранить выбранное состояние в obejct, заполняющем ячейку табличного представления.

2. Или просто включите множественный выбор в табличном представлении, и пусть он сделает все за вас.

Ответ №1:

Сделайте это…

 self.tableView.allowsMultipleSelection = YES;
  

Затем, когда вам нужно получить все выбранные строки…

 NSArray *selectedIndexPaths = [self.tableView indexPathsForSelectedRows];
  

Этот массив будет содержать все строки с галочками на них.

Не нужно ничего делать в коде самостоятельно.

Ответ №2:

Для того же, что вы пытаетесь сделать, я реализовал это следующим образом —

Объявите переменную NSIndexPath в AppDelegate или в локальном файле.

 if (Appdelegate.selectedIndexPath == (id)[NSNull null]) {
     NSLog(@"null");

     Appdelegate.selectedWebsiteIndex=indexPath;
     UITableViewCell *cell = [aTableView cellForRowAtIndexPath:indexPath];
     cell.accessoryType = UITableViewCellAccessoryCheckmark;

 }else{

     UITableViewCell *cell1 = [aTableView cellForRowAtIndexPath: Appdelegate.selectedIndexPath];
     cell1.accessoryType = UITableViewCellAccessoryNone;

     Appdelegate.selectedIndexPath =indexPath;
     UITableViewCell *cell = [aTableView cellForRowAtIndexPath:indexPath];
     cell.accessoryType = UITableViewCellAccessoryCheckmark;

 }
  

Надеюсь, это вам поможет..