Domanda

Qualcuno può dirmi come posso ottenere un IndexPath cellulare? Stavo salvando l'IndexPath nella tableView: cellForRowAtIndexPath: metodo, ma questo solo carichi quando viene visualizzato il cellulare e ho bisogno di sapere il suo percorso di indice sul metodo viewDidLoad. ciò ha determinato un valore nullo in quanto come detto carica solo il valore dopo la cella è stata visualizzata una volta.

Grazie.

Modifica

L'intenzione è in grado di passare a una cella specifica che ha il suo numero specifico ma non è lineare con le sezioni e righe contano.

È stato utile?

Soluzione

Utilizzare il metodo indexPathForCell: sul tableView, dato un puntatore ad un UITableViewCell restituisce la sua indexPath.

È possibile inserire l'scrollToRowAtIndexPath:atScrollPosition:animated: nel metodo viewWillAppear se non è ancora configurato in viewDidLoad. Questo è un posto migliore in ogni caso se la vista può apparire più di una volta dopo essere stato caricato, come ad esempio quando un controller di vista modale invoca dimissioni.

Altri suggerimenti

Un UITableViewCell non ha una proprietà NSIndexPath. Il delegato UITableViewDataSource definisce i metodi che richiedono una cella per un dato NSIndexPath, ma questo non significa che la cellula ha alcun rapporto duraturo a una proprietà NSIndexPath.

Forse sarebbe utile se lei ha spiegato più di quello che si voleva questa proprietà per? Che cosa si vuole fare con la posizione del cellulare in viewDidLoad?

Prova questo ..

    NSSet *touches = [event allTouches];
UITouch *touch = [touches anyObject];
CGPoint currentTouchPosition = [touch locationInView:EventlistTable_obj];
NSIndexPath *indexPath = [EventlistTable_obj indexPathForRowAtPoint: currentTouchPosition];
 NSLog(@"Selected  row:%d in section:%d",indexPath.row,indexPath.section);

Non chiamare in questo modo:

[cell.fourth_image_button addTarget:self action:@selector(Btn_pressed:event:) forControlEvents:UIControlEventTouchUpInside];

Sembra a me come si risposto alla tua domanda: non è possibile. Perché la cellula non ha un indexPath quando viene eseguito viewDidLoad. E infatti, non ha uno più tardi o, perché la stessa cellula potrebbe essere riutilizzato per essere a un altro indice all'interno di un decimo di secondo, se si utilizza dequeueing cellulare (bella parola!), Che si dovrebbe.

EDIT: Ok mi sembra di vedere ciò che si vuole: si sta salvando l'indexPath da soli da qualche parte quando la mano il cellulare al tableView. Nota:. Se non si fa questo, non c'è modo che si può veramente sapere a quale indexPath una cella particolare è posto, almeno non se si sta facendo le cose nel modo in cui si dovrebbe

Che cosa si può fare è semplicemente creare tutte le cellule nel metodo viewDidLoad, memorizzarli in un array, e poi, quando la vista tavolo chiede per loro, semplicemente consegnare da tale matrice.

Si noti che questo non è un buon metodo per popolare una vista tabella, perché impedisce alle cellule di essere riutilizzati. Un modo migliore sarebbe quello di salvare le contenuto delle cellule (UIViews pianura) nella matrice, e aggiungerli come i bambini alla visualizzazione del contenuto della cella prima di restituire il cellulare. Ciò consentirebbe di cellule-riutilizzo, che è fondamentale per la buona prestazione. Se non si dispone di più celle che si adatta allo schermo, non dovete preoccuparvi di loro riutilizzo tuttavia.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top