2010-01-27 9 views
228

Ho bisogno di eliminare la riga 1 di una tabella in una funzione che ho definito. Per utilizzare deleteRowAtIndexPath è necessario utilizzare uno IndexPath con una sezione e una riga definite. Come posso creare un indexpath come questo?Come creare NSIndexPath per TableView

Un array con int {1} come unico membro si bloccherà; il messaggio NSLog indica che anche la sezione deve essere definita.

* Modifica -> Codice in materia di cellule cancellare:

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]; 

risposta

612

Usa [NSIndexPath indexPathForRow:inSection:] per creare rapidamente un percorso di indice.

Edit: In Swift 3:

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

Grazie per la risposta. Il programma si blocca comunque - Report NSLog: *** Terminazione dell'app a causa dell'eccezione non rilevata 'NSInvalidArgumentException', motivo: '*** - [NSIndexPath indexPathForRow: inSection:]: selettore non riconosciuto inviato all'istanza –

+0

Originariamente pensavo che fosse un problema IndexPath. C'è qualcos'altro? Sembra che stia usando l'eliminazione in modo errato .. –

+0

- [NSIndexPath indexPathForRow: inSection:] non è nella mia documentazione. C'è una risposta che utilizza API documentate? (Ammetto che è un po 'strano che non sia lì. WTH ?!) – Olie

115

indexPathForRow è un metodo della classe!

Il codice dovrebbe leggere:

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

risposta obbligatorio a Swift: NSIndexPath(forRow:row, inSection: section)

Si noterà che NSIndexPath.indexPathForRow(row, inSection: section) non è disponibile in rapida ed è necessario utilizzare il primo metodo per costruire l'indexPath.

+0

Ho gli stessi problemi! Ho usato 'forRow: 0' e' inSezione: 0'. Funziona bene. Contiene solo il primo oggetto dell'array! Come posso aggiustarlo? Mi potete aiutare? –

+0

Potresti elaborare? Questo metodo dovrebbe restituire un singolo NSIndexPath per la riga e la sezione specificate. Quindi questo restituirà solo indexPath [0,0] – JohnVanDijk

17

Per Swift 3 E 'ora: IndexPath(row: rowIndex, section: sectionIndex)

+6

Grazie per aver aggiunto Swift 3. Il compilatore mi ha controllato per 'let cell = self.myTableView.cellForRow (in: NSIndexPath (row: 0, section: 1))' e cambiato in 'lasciare cell3 = self.myTableView.cellForRow (a: IndexPath (row: 0, section: 1))', quindi sembrano migrare da NSIndexPath a IndexPath –