Как выбрать несколько строк в UITableView? - PullRequest
1 голос
/ 21 марта 2011

Я хочу множественный выбор в UITableView, а также его данные в одном массиве или в одном словаре ...

Ответы [ 2 ]

11 голосов
/ 21 марта 2011
- (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath{

    UITableViewCell *selectedCell = [tableView cellForRowAtIndexPath:indexPath];

    if ([selectedCell accessoryType] == UITableViewCellAccessoryNone) {
        [selectedCell setAccessoryType:UITableViewCellAccessoryCheckmark];
        [selectedIndexes addObject:[NSNumber numberWithInt:indexPath.row]];
    } else {
        [selectedCell setAccessoryType:UITableViewCellAccessoryNone];
        [selectedIndexes removeObject:[NSNumber numberWithInt:indexPath.row]];
    }

    [tableView deselectRowAtIndexPath:indexPath animated:NO];

}

selectedIndexes должен быть массивом, в котором вы управляете индексами выбранных ячеек и соответственно используете позже.

1 голос
/ 20 сентября 2011

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

Вот как я его реализовал:

    - (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath {
UITableViewCell *selectedCell = [tableView cellForRowAtIndexPath:indexPath];
if ([selectedCell accessoryType] == UITableViewCellAccessoryNone) {
    [selectedCell setAccessoryType:UITableViewCellAccessoryCheckmark];
    [selectedIndexes addObject:[NSNumber numberWithInt:indexPath.row]];
    NSLog(@"IVC selectedIndexes AddObject @ %d:", indexPath.row);
    NSLog(@"IVC selectedIndexes: %@", selectedIndexes);
    } else {
    [selectedCell setAccessoryType:UITableViewCellAccessoryNone];
    [selectedIndexes removeObject:[NSNumber numberWithInt:indexPath.row]];
    NSLog(@"IVC selectedIndexes RemoveObject @ %d:", indexPath.row);
    }
[tableView deselectRowAtIndexPath:indexPath animated:NO];
}

РЕДАКТИРОВАТЬ: Добавлено решение: Вы должны вставить это в свой код "cellForRowAtIndexPath":

    if ([selectedIndexes containsObject:[NSNumber numberWithInt:indexPath.row]]) [cell setAccessoryType:UITableViewCellAccessoryCheckmark];
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...