Мне не удалось найти очевидный способ сделать это так, чтобы строки двигались во время перетаскивания.
Однако у меня есть кое-что, что должно сработать после перетаскивания.завершено.Тем не менее, по какой-то причине я не понимаю, дисплей закручивается после завершения перетаскивания.Вот как я это делаю:
- (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 "
Я застрял на этом и ищу информацию о том, как решить проблему с отображением.