2011-09-18 10 views
7

Tengo un problema con mi vista de tabla. Al descartar un controlador de vista modal presentado en la parte superior, siempre se desplaza hacia la parte superior. He tratado de observar los cambios en contentOffset usando KVO, pero el que me ensucia la vista va detrás.dismissModalViewControllerAnimated resets contentOffset

Desde el UITableViewController, cuando el usuario termina su tarea en el cuadro de diálogo modal, self.tableView.contentOffset es decir, que llamo:

[self dismissModalViewControllerAnimated:YES] 

Posteriormente, cuando el viewWillAppear:(BOOL)animated se llama, el self.tableView.contentOffset ya se ha ajustado a 0,0.

¿Se supone que esto está sucediendo? Puedo evitar el problema recordando la posición de desplazamiento antes de presentar la vista modal y restaurarla de nuevo en la vista Aparecerá después de descartar la vista modal. Pero parece equivocado. ¿Me estoy perdiendo de algo?

He encontrado un problema similar descrito en Dismiss modal view changes underlying UIScrollView.

+1

¿Puedes verificar si se llama a 'viewDidLoad:' después de descartar la vista modal? (Noté que esto puede suceder durante la advertencia de memoria, algunos componentes se descargan incluso si se empuja la vista). –

+0

babbidi tiene un buen punto, su vista podría descargarse mientras la vista modal está en la parte superior, en el caso de una advertencia de memoria. Si inicializa su vista de tabla en su método viewDidLoad, y hay una advertencia de memoria durante la vista modal, entonces la vista de tabla podría reiniciarse cuando cierre la vista modal. Ponga NSLogs en viewDidUnload y viewDidLoad. – MattyG

+0

Ya estaba monitoreando 'viewDidUnload' - y no, la vista no está descargada. – Palimondo

Respuesta

5

Parece que este es el comportamiento predeterminado de UITableViewController. Lo probé en una aplicación muy simple y funcionó exactamente como dijiste. Si no te gusta, utiliza UIViewController en su lugar.

+0

Gracias por confirmar mi sospecha. Estaba comenzando a preguntarme ;-) – Palimondo

+0

@Split Tengo UIViewController pero aún así este problema es reproducible – iOSdev

5

Así es como me ocupo de este problema, para que la vista de tabla mantenga la posición de desplazamiento original. En mi subclase de UITableViewController He añadido:

@property (assign) CGPoint lastScrollPosition; 

Luego, en la ejecución, que han anulado la siguiente:

- (void)viewWillAppear:(BOOL)animated 
{ 
    self.tableView.contentOffset = self.lastScrollPosition; 
} 

- (void)dismissModalViewControllerAnimated:(BOOL)animated 
{ 
    self.lastScrollPosition = self.tableView.contentOffset; 
    [super dismissModalViewControllerAnimated:animated]; 
} 

Si desea que la tabla a aparecer inicialmente desplazado a distinto de cero posición, como se Lo hice, no te olvides de inicializar el lastScrollPosition en tu viewDidLoad.

+0

Gracias Palimondo por la publicación. ¡Has resuelto un problema exacto para mí! –

Cuestiones relacionadas