Je n'ai pas réussi à trouver une façon évidente de faire cela de manière à ce que les lignes bougent pendant que le glissement est en cours.
Cependant, j'ai quelque chose qui devrait fonctionner une fois la traînée est terminée. Cependant, pour une raison quelconque, je ne comprends pas, l'affichage est foutu lorsque la traînée est terminée. Voici comment je le fais:
- (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];
}
}
Cela devrait être raison, mais quand la traînée est terminée, les cellules totalement absente vais l'écran (avec seulement l'arrière-plan visible où la cellule doit être). J'ai essayé d'appeler [self.tableview reloadData] depuis moveRowAtIndexPath, mais la documentation d'Apple dit: "Il ne devrait pas être appelé dans les méthodes qui insèrent ou suppriment des lignes, en particulier dans un bloc d'animation implémenté avec des appels à beginUpdates et endUpdates "
Je suis coincé à ce sujet et cherche une entrée sur la façon de résoudre le problème d'affichage.
Je laisse l'utilisateur faire glisser les cellules où il veut et quand il appuie sur done, il sépare la liste dans les six premiers et les quatre derniers. C'est le plus proche que je pourrais faire pour les garder séparés. Mais ça a l'air bien. Merci de votre aide. – Rossi