Изменение порядка строк в UITable Grouped при сохранении количества строк в каждой группе - PullRequest
0 голосов
/ 08 сентября 2010

У меня есть сгруппированная таблица, которую я хочу, чтобы пользователь мог изменить порядок. Я хотел бы иметь две группы. Когда я перемещаю строку из группы A в группу B, мне бы хотелось, чтобы верхняя строка из группы B была перемещена в конец группы A. Когда я перемещаю строку из группы B в группу A, мне нужна нижняя строка. группы А для перемещения на вершину группы В.

Таким образом, размер каждой группы в таблице сохраняется. Это возможно?

Большое спасибо!

1 Ответ

0 голосов
/ 27 сентября 2010

Мне не удалось найти очевидный способ сделать это так, чтобы строки двигались во время перетаскивания.

Однако у меня есть кое-что, что должно сработать после перетаскивания.завершено.Тем не менее, по какой-то причине я не понимаю, дисплей закручивается после завершения перетаскивания.Вот как я это делаю:

- (NSInteger) numberOfSectionsInTableView:(UITableView *)tableView {
    return 2;
}

- (NSInteger) tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section {
    switch (section) {
        case INDEX_OF_SECTION_SELECTED_READOUTS:
            return NUMBER_OF_READOUTS_DISPLAYED;
            break;
        case INDEX_OF_SECTION_UNSELECTED_READOUTS:
            return NUMBER_OF_POSSIBLE_READOUT_CHOICES - NUMBER_OF_READOUTS_DISPLAYED;
            break;
        default:
            return 0;
            break;
    }
}

- (NSString *) tableView:(UITableView *)tableView titleForHeaderInSection:(NSInteger)section {
    switch (section) {
        case INDEX_OF_SECTION_SELECTED_READOUTS:
            return @"Displayed";
            break;
        case INDEX_OF_SECTION_UNSELECTED_READOUTS:
            return @"Available";
            break;
        default:
            return @"";
            break;
    }
}

- (int) getIndexFromIndexPath:(NSIndexPath *)indexPath {
    int index = indexPath.row;
    if (indexPath.section == INDEX_OF_SECTION_UNSELECTED_READOUTS) {
        index += NUMBER_OF_READOUTS_DISPLAYED;
    }
    return index;
}

- (void) tableView:(UITableView *) tableView moveRowAtIndexPath:(NSIndexPath *)fromIndexPath toIndexPath:(NSIndexPath *)toIndexPath {
    int fromIndex = [self getIndexFromIndexPath:fromIndexPath];
    int toIndex = [self getIndexFromIndexPath:toIndexPath];

    if (toIndex < fromIndex) {       
        // Shuffle the to row and everything beneath it down by one
        for (int i = fromIndex; i > toIndex; i--) {
            [readouts exchangeObjectAtIndex:i withObjectAtIndex:i-1];
        }
    }
    else {
        // Shuffle the to row and everything above it up by one
        for (int i=fromIndex; i < toIndex; i++) {
            [readouts exchangeObjectAtIndex:i withObjectAtIndex:i+1];    
        }
    }

    // Now update the order for the readouts
    for (int i=0; i < [readouts count]; i++) {
        NSString *key = [readouts objectAtIndex:i];     
        [readoutService setReadoutType:key index:i];
    }   
}

Это должно быть правильно, но когда перетаскивание завершено, ячейки полностью исчезают с дисплея (с видимым фоном, где должна быть ячейка).

Я пытался вызвать [self.tableview reloadData] из moveRowAtIndexPath, но в документации Apple говорится: «Его не следует вызывать в методах, которые вставляют или удаляют строки, особенно в блоке анимации, реализованном с вызовами beginUpdates.и endUpdates "

Я застрял на этом и ищу информацию о том, как решить проблему с отображением.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...