2011-12-20 15 views
5

Tengo una UITableView principal, cuando se presiona la celda va a otra UITableView y cuando se presiona una celda se dirige a una Vista de detalles de esa celda.UIViewController para saber si se presionó o apareció?

Quiero que el UITableView del medio se comporte de manera diferente dependiendo de si se sacó el detalleViewView o el mismo UITableView. Si la vista se presionó desde la tabla principal, quiero desplazarme hacia la parte superior, si se muestra después de que se ha reventado un DetailView, quiero que se mantenga en la misma posición.

¿Alguna sugerencia?

Respuesta

2

puede llamar a un método scrollToTop en DetailViewController después de haberlo enviado al navigationController.

Algo así:

if (!detailViewController) { 
    detailViewController = [[DetailViewController alloc] initWithNibName:nil bundle:nil]; 
} 
[self.navigationController pushViewController:detailViewController animated:YES]; 
[detailViewController scrollToTop]; 
// or use the tableView directly: 
// [detailViewController.tableView scrollToRowAtIndexPath:[NSIndexPath indexPathForRow:0 inSection:0] atScrollPosition:UITableViewScrollPositionTop animated:YES]; 
+0

Gracias, ni siquiera sabía que podía desplazarse antes de que la vista sea "visible". – Nings

0

Crear un BOOL @property en su propiedad UIViewController media llamada wasPushed o algo similar, y cuando de que arranque desde UIViewController 1, establezca la propiedad de la nueva instancia, empujarlo en la pila de navegación y, a continuación, puede utilizar su propiedad en los métodos de su controlador de vista media loadView, viewDidLoad, viewWill/DidAppear.

Tan pronto como lo haya usado, configúrelo de nuevo en FALSE o NO (o lo que sea) y cuando termine regresando debido a que se desconectó su 3er controlador de vista lo tendrá como FALSE/NO en su loadView, viewDidLoad etc. métodos.

+0

Nothe que 'no conseguir viewDidLoad'is Cuando llamó a su 3er controlador de vista – pmk

+0

, obtendría 'viewDidLoad' si tocaba una advertencia de memoria o si la vista de viewController se descartaba mientras estaba más profundo en la pila. – Jessedc

+0

hm no sabía eso, gracias por la pista. ¿Existe alguna regla o alguna definición sobre cuándo se descarta la vista de viewController? – pmk

1

En su Vista Controlador Media, examinar qué punto de vista es próxima a la indicación directa de la pila UINavigationController:

- (void)viewWillDisappear:(BOOL)animated 
{ 
    if ([self.navigationController.topViewController isEqual:(UITableViewController *)tvcDetailView]) { 
     // Detail view has been pushed onto the UINavigationController stack 
    } 
    else { 
     // Middle view has been popped from the UINavigationController stack 
    } 
} 
+0

No era perfecto para este problema ya que no contabilizaba el primer lanzamiento de la vista (debería desplazarse también entonces. Pero realmente funcionó bien con otro problema que tuve, ¡así que gracias por eso! – Nings

Cuestiones relacionadas