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.

È stato utile?

Soluzione

  1. Il UITableViewDataSource metodo delegato -tableView:sectionForSectionIndexTitle:atIndex: restituisce un NSInteger 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).

  2. Impostazione di una proprietà nel controller della vista, un NSInteger chiamato selectedSectionIndex. Il suo valore è impostato nel metodo delegato suddetto.

  3. 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.

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