2009-08-04 9 views
1

Ich bin sicher, das ist eine einfache Sache zu tun. Ich bin sehr neu in Ziel C (nahm einen Job auf, den der Chef auslagern würde) und konnte alle Hilfe gebrauchen, die ich bekommen konnte. Richte mich hier einfach in die richtige Richtung. Grundsätzlich, was ich einrichten möchte, ist dies:Verschieben UITableView Zeile an den Anfang der Liste, wenn ausgewählt

Ich habe eine Liste von Telefonnummern, die auf so viele Zeilen wie benötigt erweitert. Ich habe kein Problem beim Auffüllen und die Liste funktioniert gut, aber ich möchte, dass alle zuletzt ausgewählten Elemente in der Liste oben leichter zugänglich sind. Also, wann immer der Benutzer "didSelectRowAtIndexPath", möchte ich die Zeile an die Spitze verschieben.

Ich weiß nur, das ist super einfach ... aber ich habe die Lösung noch nicht gefunden. Keine Eile. Ich versuche nur, die Dinge selbst herauszufinden. Danke im Voraus!

Antwort

3

Die Reihenfolge der Elemente liegt in der Verantwortung der Datenquelle (Ihr Code), nicht in der Tabellenansicht. Wenn Sie Dinge neu anordnen möchten, müssen Sie die Datenstruktur neu anordnen, die Sie verwenden, um -cellForRowAtIndexPath: zu fahren. Wenn Sie Animationen wollen, glaube ich nicht, dass es eine gute Bewegungsanimation gibt. Das Beste, was Sie wahrscheinlich (leicht) tun können, ist das Löschen und Einfügen. Details zur Animation finden Sie unter Batch Insertion and Deletion of Rows and Sections. Vor ein paar Monaten habe ich die Entwickler von UITableView nach der allgemeinen Fehlerhaftigkeit und Zerbrechlichkeit dieser Animationen in OS2.x gefragt, und sie haben mir versichert, dass viel Arbeit in die Verbesserung von OS3 investiert wurde. Hoffentlich können Sie einfach der Dokumentation folgen und sie sollte nicht mehr abstürzen.

0

UITableView eine Methode namens

- (void)tableView:(UITableView *)tableView moveRowAtIndexPath:(NSIndexPath *)fromIndexPath toIndexPath:(NSIndexPath *)toIndexPath

Ich glaube, Sie haben tatsächlich jedoch den Code zu schreiben, ich bin nicht sicher, weil ich noch nie mit Tabellen gearbeitet (ich bin neu auch) .

2

Es ist nicht möglich, eine Zeile von einem Speicherort in der Tabelle zu einem anderen zu löschen. Es kann durch Entfernen der Zeile emuliert wird und dann bei der Zugabe wieder am neuen Standort:

// Remove the row from your datasource here 
[tableView deleteRowsAtIndexPaths:[NSArray arrayWithObject:sourcePath] withRowAnimation:UITableViewRowAnimationLeft]; 
// Add the row back into the datasource here 
[tableView insertRowsAtIndexPaths:[NSArray arrayWithObject:destPath] withRowAnimation:UITableViewRowAnimationLeft]; 

die Kommentare Ersetzen mit den richtigen Befehlen Ihrer Datenquelle

0

Versuchen Sie, diese (die Arbeitscodeliste) zu aktualisieren:

- (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath { 

if(indexPath.row == 0) return; 

NSString * selectedNum = [numbers objectAtIndex:indexPath.row]; // NSMutableArray* numbers = dataStore 
[selectedNum retain]; 

[numbers removeObjectAtIndex:indexPath.row]; 
[tableView deleteRowsAtIndexPaths:[NSArray arrayWithObject:indexPath] 
      withRowAnimation:UITableViewRowAnimationLeft]; 
[numbers insertObject:selectedNum atIndex:0]; 
[tableView insertRowsAtIndexPaths:[NSArray 
      arrayWithObject:[NSIndexPath indexPathForRow:0 inSection:0]] 
      withRowAnimation:UITableViewRowAnimationLeft]; 

[selectedNum release]; 

}

+0

Hallo @Tomas, Ihr Code funktioniert, aber wir haben Animationseffekt wie klare App – Ranjit

Verwandte Themen