2011-11-08 13 views
23

Ho un UITableView e un altro UITableViewCells che ho creato manualmente tramite il Interface Builder. Ho assegnato a ogni cella uno outlet e im collegandoli allo UITableView nel metodo CellForRowAtIndexPath. Con questo metodo, utilizzo il metodo switch(case) per far apparire specifiche celle nello UITableView, dipende dal caso.Verificare se un UITableViewCell specifico è visibile in un UITableView

Ora, voglio trovare una cella specifica e controllare se esiste all'interno dello UITableView. Io uso il metodo: UITableView.visibleCells per ottenere una matrice delle celle nella vista tabella. La mia domanda è: come posso controllare se esistono celle specifiche nell'array? posso usare la presa che ho assegnato ad esso in qualche modo? - (La soluzione migliore), O, posso usare un identificatore e come?

Grazie :)

risposta

74

noti che è possibile anche utilizzare indexPathsForVisibleRows questo modo:

NSUInteger index = [_people indexOfObject:person]; 
    NSIndexPath *indexPath = [NSIndexPath indexPathForRow:index inSection:0]; 
    if ([self.tableView.indexPathsForVisibleRows containsObject:indexPath]) { 
     [self.tableView reloadRowsAtIndexPaths:[NSArray arrayWithObject:indexPath] 
          withRowAnimation:UITableViewRowAnimationFade]; 
    } 

Se avete l'indexPath (e non è necessario il cellulare reale) potrebbe essere più conveniente .

PS: _people è il utilizzato come back-end in questo caso.

+3

Questa soluzione è migliore della soluzione accettata nella maggior parte dei casi. – Envil

+0

Funziona perfettamente !! Grazie:) – Gaurav

11

È possibile utilizzare il metodo UITableView:

[tableView indexPathForCell:aCell]; 

Se la cella non esiste nel tableView tornerà zero. Altrimenti si otterrà NSIndexPath della cella.

+1

Quello è il lavoro, grazie :) – ozking

+4

questo non funziona quando si riutilizza le cellule –

+0

grazie, funziona +1 – iLearner

16
if ([tableView.visibleCells containsObject:myCell]) 
{ 
    // Do your thing 
} 

Questo presuppone che una variabile un'istanza separata contenente la cella che ti interessa, penso che si fa dalla domanda, ma non è chiaro.

+0

Grazie, è un altro modo di implementare la soluzione che Sorig mi ha dato :) – ozking

+0

Questa è la risposta corretta alla domanda originale, se una cella è visibile. Grazie per la risposta pulita e semplice. –

0

si può fare questo a Swift 3 per verificare se il UITableViewCell è visibile:

let indexPathToVerify = IndexPath(row: 0, section: 0) 
let cell = tableView.cellForRow(at: indexPathToVerify) 

if tableView.visibleCells.contains(cell) { 
    // the cell is visible 
} 
di
Problemi correlati