2010-07-19 12 views
11

Tengo un problema extraño con TableViewController. En el documento, dice que tableViewController también trata el método -flashScrollIndicators cuando la tabla está "sobredimensionada" respecto al área visible.TableViewController no muestra los indicadores de desplazamiento aunque la tabla sea más grande que la vista

Mi aplicación consiste en 3 controladores de navegación cargados en un controlador de pestañas. Cada controlador de navegación tiene como controlador de vista raíz una subclase de un controlador de vista de tabla. Cada "modelo" se rellena desde un archivo plist, que carga sus contenidos en una matriz en -viewDIdLoad, luego todo se pasa a la tabla. Todo se carga programáticamente sin IB.

He descubierto en mi aplicación que cuando carga la primera vista (un controlador de navegación con un controlador de vista de tabla como raíz) la barra de desplazamiento no está parpadeando, incluso si el número de células es lo suficientemente grande. Si elijo otra pestaña, que carga otro controlador de navegación (con un t.v.c. como raíz), la barra de desplazamiento no se muestra de nuevo. Cuando presiono la pestaña correspondiente al primer controlador de navegación cargado, la barra de desplazamiento parpadea.

Así que he tratado de hacer que el flash mediante programación pero no hay manera, el código parece simple:

[self.tableView flashScrollIndicators]; 

He tratado de ponerlo en casi todas partes. Primero en -viewDidLoad (como se sugiere en el documento), en viewDidAppear y en -viewWillAppear. También intenté usar ese código tring para ver el t.v.c. como una vista de tabla.

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

..in resultado.

Comencé a buscar en la muestra de Apple y encontré que en la vista de tabla de Apple la barra de desplazamiento muestra personalizada (la que tiene diferentes tiempos) no parpadea también allí. Probado tanto en sim como en dispositivo.

¿Es un error ?, ¿hay una forma correcta de mostrarlo mediante programación? ¿Alguien me puede ayudar? Saludos cordiales, Andrea

+0

Sólo debe trabajar cuando se llama 'flashScrollIndicators', pero puedo confirmar que puede ser extremadamente frustrante identificar el mejor lugar para poner cosas como esta. No hay ninguna penalización al llamarlo dos veces, así que limpie su proyecto con esta llamada ;-) – mvds

+0

Hola mvds, lamentablemente no funciona aunque intente llamar solo en -viewDidLoad, -viewWillAppear, -viewDidAppear. – Andrea

+0

¿Comprobó que self.tableView no es nulo? ¿Intentó un -reloadData primero? –

Respuesta

38

O de manera más concisa:

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

¡Esto funciona! ¡Gracias! Utilizo esto en [acaniChat] (https://github.com/acani/acaniChat) para mostrar los indicadores de desplazamiento del 'UITableView * chatContent' cuando aparece' UIViewController * chatViewController'. – ma11hew28

+0

editado, olvidando llamar implementación de la súper clase es el mal hábito;) – matm

+0

Estaba usando solo [self.scrollView flashScrollIndicators]; que no funcionó en un caso particular, mientras que su solución performSelector funciona muy bien. Gracias. –

12

Tuve exactamente el mismo problema. Al final lo solucioné colocando un selector retrasado en el método viewDidAppear:. Extrañamente, puedo configurarlo a 0 segundos y todavía funciona bien.

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

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

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

Esa es la solución que estaba buscando.THX. Saludos, Andrea – Andrea

+2

también lo puede hacer así '[self.tableView performSelector: @selector (flashScrollIndicators) withObject: nil afterDelay: 0.0];' – matm

3

No se visualiza cuando se presenta títulos índice sección.

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

+1 para la información – filou

0

Mi solución fue enviar los "flashScrollIndicators()" mensaje con un ligero retraso usando "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() 
}) 
Cuestiones relacionadas