C'è un modo per sapere quando l'indice su UITableView è effettivamente utilizzato?
-
02-10-2019 - |
Domanda
C'è un modo per sapere quando l'indice su UITableView è effettivamente utilizzato? Non riesco a trovare alcun metodo nella documentazione di Apple, ma mi chiedevo se qualcuno sa qualcosa. Vorrei fondamentalmente come fare un'animazione a mio avviso tabella che cambia a seconda di cosa si seleziona la sezione nell'indice, e non ho idea di come fare questo senza accedere l'indice di visualizzazione della tabella.
Ogni aiuto è molto apprezzato.
Grazie.
Soluzione
-
Il
UITableViewDataSource
metodo delegato-tableView:sectionForSectionIndexTitle:atIndex:
restituisce unNSInteger
rappresenta la sezione selezionata dall'indice sezione. Ignorare questo metodo in qualsiasi classe è l'origine dati delegato (probabilmente la vostra tabella di vista del regolatore). -
Impostazione di una proprietà nel controller della vista, un
NSInteger
chiamatoselectedSectionIndex
. Il suo valore è impostato nel metodo delegato suddetto. -
Infine, istituire un osservatore nel controller della vista, che attende per le modifiche a questa proprietà e fa scattare il codice desiderato quando un cambiamento venga osservata.
Nel tuo metodo -viewWillAppear:
, ad esempio:
[self addObserver:self forKeyPath:@"selectedSectionIndex" options:NSKeyValueObservingOptionNew context:nil];
Nel tuo metodo -viewWillDisappear:
, annullare la registrazione l'osservatore:
[self removeObserver:self forKeyPath:@"selectedSectionIndex"];
E 'importante fare questo in modo che il metodo -dealloc
non un'eccezione.
Infine, impostare il metodo di osservatore a fare qualcosa quando c'è un cambiamento per selectedSectionIndex
:
- (void) observeValueForKeyPath:(NSString *)keyPath ofObject:(id)object change:(NSDictionary *)change context:(void *)context {
if ([keyPath isEqual:@"selectedSectionIndex"]) {
// The section index changed, so trigger some cool animation
}
}
Il modello chiave-valore Observing è un buon modo generale per innescare qualcosa quando il valore di un oggetto cambia da qualche parte. Apple ha scritto un buon "quick-start" documento che introduce questo argomento.
Altri suggerimenti
Non è una soluzione molto elegante, ma si può essere in grado di sottoclasse UITableView e guardare per in - (void)didAddSubview:(UIView *)subview;
quando è arrivato prima si presenta. Ciò presuppone che viene aggiunto direttamente al UITableView e non uno dei suoi subviews o superview, e che si può riconoscere la vista aggiunto come l'indice. E 'anche possibile che dopo la prima volta che viene aggiunto sarà nascosto e mostrato anziché essere rimosso e nuovamente aggiunto.