2010-01-27 5 views
228

Ich muss Zeile 1 einer Tabelle in einer Funktion löschen, die ich definiert habe. Um deleteRowAtIndexPath zu verwenden, müssen Sie einen IndexPath mit einem Abschnitt und einer Zeile definiert verwenden. Wie kann ich einen Indexpfad wie diesen erstellen?So erstellen Sie NSIndexPath für TableView

Ein Array mit dem int {1} als einzigem Element wird abstürzen; Die NSLog-Nachricht besagt, dass der Abschnitt ebenfalls definiert werden muss.

* Bearbeiten -> Code Zelle in Bezug zu löschen:

NSIndexPath *myIP = [[NSIndexPath alloc] indexPathForRow:0 inSection:0]; 
    NSArray *myArray = [[NSArray alloc] initWithObjects:myIP, nil]; 
// [self.tableView beginUpdates]; 
    [self.tableView deleteRowsAtIndexPaths:myArray withRowAnimation:UITableViewRowAnimationFade]; 
// [self.tableView endUpdates]; 

Antwort

612

Verwenden [NSIndexPath indexPathForRow:inSection:], um schnell einen Index Pfad zu erstellen.

Edit: In Swift 3:

let indexPath = IndexPath(row: rowIndex, section: sectionIndex) 
+2

Danke für die Antwort. Das Programm stürzt jedoch immer noch ab - NSLog meldet: *** Beenden der App aufgrund der nicht abgefangenen Ausnahme 'NSInvalidArgumentException', Grund: '*** - [NSIndexPath indexPathForRow: inSection:]: unerkannter Selektor gesendet an Instanz –

+0

Ich dachte ursprünglich, dass dies der Fall ist ein IndexPath-Problem. Gibt es noch etwas anderes? Scheint, dass ich die Löschung falsch verwenden könnte. –

+0

- [NSIndexPath indexPathForRow: inSection:] ist nicht in meiner Dokumentation. Gibt es eine Antwort, die dokumentierte APIs verwendet? (ich gebe zu, es ist ein bisschen komisch, dass es nicht dort ist. WTH ?!) – Olie

115

indexPathForRow ist eine Klassenmethode! lesen

sollte der Code:

NSIndexPath *myIP = [NSIndexPath indexPathForRow:0 inSection:0] ; 
17

obligatorische Antwort in Swift: NSIndexPath(forRow:row, inSection: section)

Sie werden feststellen, dass NSIndexPath.indexPathForRow(row, inSection: section) in swift nicht verfügbar ist, und Sie müssen die erste Methode verwenden, um das indexPath zu konstruieren.

+0

Ich habe dieselben Probleme! Ich habe 'forRow: 0' und' inSection: 0' verwendet. Es läuft gut. Es enthält nur das erste Objekt aus dem Array! Wie kann ich es reparieren? Kannst du mir helfen? –

+0

Könnten Sie das näher erläutern? Diese Methode soll einen einzelnen NSIndexPath für die angegebene Zeile und den angegebenen Abschnitt zurückgeben. Das bringt nur den indexPath [0,0] zurück – JohnVanDijk

17

Für Swift 3 ist es jetzt: IndexPath(row: rowIndex, section: sectionIndex)

+6

Danke, dass du Swift 3 hinzugefügt hast. Der Compiler hat mich bei 'let cell = self.myTableView.cellForRow (at: NSIndexPath (row: 0, section: 1))' und habe es in 'let cell3 = self.myTableView.cellForRow (at: IndexPath (row: 0, section: 1))' 'geändert, sodass sie von NSIndexPath zu IndexPath zu migrieren scheinen –

Verwandte Themen