2010-07-19 13 views
11

Ho un problema strano con un TableViewController. Nel documento si dice che un TableViewController si occupa anche del metodo -flashScrollIndicators quando la tabella è "sovradimensionata" rispetto all'area visibile.TableViewController non lampeggia gli indicatori di scorrimento anche se la tabella è più grande della vista

La mia app consiste in 3 controller di navigazione caricati in un controller di schede. Ogni controller di navigazione ha come controller di visualizzazione di root una sottoclasse di un controller di visualizzazione tabella. Ogni "modello" viene popolato da un file plist, che carica il suo contenuto in una matrice in -viewDIdLoad, successivamente tutto viene passato alla tabella. Tutto è caricato programmaticamente no IB.

Ho scoperto nella mia app che quando carica la prima vista (un controller nav con un controller di visualizzazione tabella come root) la barra di scorrimento non lampeggia anche se il numero di celle è abbastanza grande. Se scelgo un'altra scheda, che carica un'altra barra di navigazione (con una t.v.c. come root) la barra di scorrimento non viene più visualizzata. Quando premo la scheda corrispondente al primo controller nav caricato, la barra di scorrimento lampeggia.

Così ho cercato di renderlo il flash a livello di codice, ma nessun modo, il codice sembra semplice:

[self.tableView flashScrollIndicators]; 

Ho cercato di metterlo un po 'ovunque. Prima in -viewDidLoad (come suggerito nel documento), quindi in viewDidAppear e in -viewWillAppear. Anche provato a usare quel code tring per trasmettere la vista del t.v.c. come una vista tabella.

[((UITableView*)self.view) flashScrollIndicators]; 

.. senza risultato.

Ho iniziato a guardare l'esempio di Apple e ho trovato che nella barra di scorrimento di esempio di visualizzazione tabella di Apple (quella con tempi diversi) non lampeggia anche lì. Testato sia su sim che su dispositivo.

È un errore ?, c'è un modo corretto per mostrarlo a livello di programmazione? Qualcuno può aiutarmi? Cordiali saluti, Andrea

+0

dovrebbe funzionare quando si chiama 'flashScrollIndicators', ma posso confermare può essere estremamente frustrante individuare il posto migliore dove mettere cose come questa. Non c'è penalità nel chiamarlo due volte, quindi basta buttare via il tuo progetto con questa chiamata ;-) – mvds

+0

Ciao mvds purtroppo non funziona anche se provo a chiamare da solo in -viewDidLoad, -viewWillAppear, -viewDidAppear. – Andrea

+0

Hai controllato che self.tableView non è nullo? Hai provato a -reloadData prima? –

risposta

38

O più conciso:

- (void)viewDidAppear:(BOOL)animated { 
    [super viewDidAppear:animated]; 
    [self.tableView performSelector:@selector(flashScrollIndicators) withObject:nil afterDelay:0]; 
} 
+0

Questo funziona !!! Grazie! Lo uso in [acaniChat] (https://github.com/acani/acaniChat) per far lampeggiare gli indicatori di scorrimento di 'UITableView * chatContent' quando viene visualizzato' UIViewController * chatViewController'. – ma11hew28

+0

modificato, dimenticando di chiamare l'implementazione della super classe è la cattiva abitudine;) – matm

+0

Stavo usando solo [self.scrollView flashScrollIndicators]; che non ha funzionato in un caso particolare, mentre la soluzione performSelector funziona benissimo. Grazie. –

12

Ho avuto esattamente lo stesso problema. Alla fine ho risolto il problema inserendo un selettore ritardato nel metodo viewDidAppear:. Stranamente, posso impostarlo su 0 secondi e funziona ancora bene.

- (void)viewDidAppear:(BOOL)animated 
{ 
    [super viewDidAppear:animated]; 

    [self performSelector:@selector(flashTableScrollIndicators) withObject:nil afterDelay:0.0]; 
} 

- (void)flashTableScrollIndicators 
{ 
    [self.tableView flashScrollIndicators]; 
} 
+0

Questa è la soluzione che stavo cercando.THX. Cordiali saluti, Andrea – Andrea

+2

si può anche fare così '[self.tableView performSelector: @selector (flashScrollIndicators) withObject: nil afterDelay: 0.0];' – matm

3

Non viene visualizzato quando si mostrano i titoli di indice sezione.

- (NSArray *)sectionIndexTitlesForTableView:(UITableView *)tableView; 
+0

+1 per le informazioni – filou

0

La mia soluzione era quella di inviare il "flashScrollIndicators()" messaggio con un leggero ritardo utilizzando "dispatch_after":

let delayTime = dispatch_time(DISPATCH_TIME_NOW, Int64(0.4 * Double(NSEC_PER_SEC))) 

dispatch_after(delayTime, dispatch_get_main_queue(), 
{() -> Void in 
    myScrollView.flashScrollIndicators() 
})