#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;
}
Надеюсь, это вам поможет..