Pregunta

Aquí está la cosa.Actualmente tengo un tabBar controlador, con varios controladores de navegación en ella.Al igual que este :

http://tof.canardpc.com/view/d27d1361-c81b-43a0-9b5b-abb13d78e422.jpg

En mi primer controlador de navegación, tengo un controlador de vista de llamada NewsViewsController.Aquí está su punta (ver foto).

Mi objetivo es mostrar/ocultar las subvistas (con formato tableview en el interior) de acuerdo a la posición de la segmentación de control.De esta manera, puedo tener dos separa viewControllers para cada formato tableview.Este es en realidad el trabajo.Y aquí está el resultado (ver foto).

Mi problema es el siguiente.Cuando yo intente hacer clic en una celda, el pushview no funciona.De hecho en mi auto.navigationController es nulo.¿Cómo puedo empujar mi vista de detalle utilizando el padre de navegación controlador ?

Es la arquitectura de mi solicitud de malo ?Gracias =)

¿Fue útil?

Solución

El controlador de navegación está configurado para empujar y hacer estallar el controlador de vista que gestiona toda la vista. Realmente no hay nada en el API es compatible con facilidad múltiples controladores de vista cuyos puntos de vista mostrará en la misma supervista.

En lugar de tratar de empujar a la siguiente vista sobre uno de los subvistas Tableview, que debe gestionar el NAV desde el controlador "Noticias Ver". Incluso mejor, usted debe tener sólo el controlador de "Noticias Ver" y tienen clases separadas que implementan delegado y fuentes de datos de cada tabla (que no tienen que estar en el controlador de vista es sólo por lo general conveniente.)

Algo como esto:

@interface NewsViewController {
    CustomClass1 *newsTableDelegateAndDataSource;
    CustomClass2 *categoryTableDelegateAndDataSource;
}

@interface CustomClass1 {
    UINavigationController *nav;
}

en NewsViewController.m

- (void) viewWillAppear{
    self.newsTableDelegateAndDataSource.nav= // reference to the navigation controller;
    self.categoryTableDelegateAndDataSource.nav = // reference to the navigation controller;
}

A continuación, en los métodos didSelectRow de uno de CustomClasses:

nextViewController=// intialize or get reference to next view controller
[self.nav pushViewController:nextViewController animated:YES];

El NAV empujará el nextViewController en la parte superior de NewsViewController y mostrar la nueva pantalla. Una vez hecho esto, que aparece y reaparece en sí NewsViewController en el estado en que lo dejó en.

De esta manera sólo tiene un punto de vista controlador activo en el momento nadie lo que la API funciona sin problemas, pero que encapsulan el comportamiento de cada tabla en su propia clase.

Todo el mundo es feliz.

Otros consejos

He conseguido esta llamando a un método primario de la subvista - el padre método realiza la inserción.

Subvista:

@protocol SubUIViewDelegate
    -(void)pushViewController:(UIViewController*)ctrl;
@end

@interface ... {
   ...
   id<SubUIViewDelegate> delegate;
}
@property (nonatomic,assign) id <SubUIViewDelegate> delegate;
...
@end

Entonces @sintetizar el delegado y el uso de los siguientes llamar a un empuje de la subvista

[self.delegate pushViewController : new_view_ctrl];

Los Padres De Controlador De Vista:

@interface parentview : ... <SubUIViewDelegate> {
    ...
}
-(void) pushViewController: (UIViewController*) ctrl;

Implementa:

subview.delegate = self;

-(void)pushViewController:(UIViewController*)ctrl {
    [self.navigationController pushViewController:ctrl animated:YES];
}

Espero que esto ayude.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top