Tengo mis puntos de vista y los controladores de configurar como tal.

  1. Una Tab Bar controller
  2. Dentro de 1. es una raíz de controlador de vista de
  3. dentro de las 2. es una programación de navegación creado controlador, que se muestra como una subvista en la raíz de controlador de vista.

Lo que estoy tratando de hacer es acceder a la pestaña superior de la barra de navegación o controlador, así que puedo empujar un punto de vista en ella.

Traté de parentViewController pero todo lo que hizo fue empujar a la vista en la programación del nav controlador.

alguna sugerencia?

Esto es cómo puedo configurar mi raíz vista controlador:

  -(void)viewDidAppear:(BOOL)animated{
    NSLog(@"ROOT APPEARED");
    [super viewDidAppear:animated];

    WorklistViewController *worklistController = [[WorklistViewController alloc]initWithNibName:@"WorklistView" bundle:[NSBundle mainBundle]];
    UINavigationController *worklistNavController = [[UINavigationController alloc] initWithRootViewController:worklistController];
    worklistNavController.navigationBar.barStyle = UIBarStyleBlackOpaque;
    worklistNavController.view.frame = watchlistView.frame;
    [worklistNavController.topViewController  viewDidLoad];
    [worklistNavController.topViewController  viewWillAppear:YES];
    [self.view addSubview:worklistNavController.view];

    GetAlertRequestViewController *alertsController = [[GetAlertRequestViewController alloc]initWithNibName:@"AlertsView" bundle:[NSBundle mainBundle]];
    UINavigationController *alertsNavController = [[UINavigationController alloc] initWithRootViewController:alertsController];
    alertsNavController.navigationBar.barStyle = UIBarStyleBlackOpaque;
    alertsNavController.view.frame = alertsView.frame;
    [alertsNavController.topViewController  viewDidLoad];
    [alertsNavController.topViewController  viewWillAppear:YES];
    [self.view addSubview:alertsNavController.view];
}

OriginalEl autor Matt | 2010-06-29

3 Comentarios

  1. 30

    Anidada ViewController (es decir, dentro de una vista controlado por un ViewController que en realidad en el NavController pila) no tiene acceso directo a la UINavigationController que su padre la vista controlador es un miembro de la pila. Eso es un BOCADO de una frase, pero en el sentido de que es: usted no puede llegar allí desde aquí.

    Lugar tienes que entrar en la app del NavController a través de la Aplicación de delegado.

    YourAppDelegate *del = (YourAppDelegate *)[UIApplication sharedApplication].delegate;
    [del.navigationController pushViewController:nextViewController animated:YES];

    Usted está utilizando su UIApplication del singleton (contiene todo tipo de buena información acerca de su aplicación), que tiene una .el delegado de la propiedad que apunta a la AppDelegate, y que contiene una referencia a la NavigationController.

    Esta es la forma en la «Navegación basada en la Aplicación» Xcode plantilla establece NavController la propiedad, de todos modos. YMMV si usted rodó su propia–, aunque si lo hizo, probablemente no necesita para hacer esta pregunta.

    Con iOS 4.0 como destino de implementación, el código ‘del.navigationController’ hace que un error de compilación : «Solicitud de miembro navigationController en algo que no es una estructura o unión»
    aplicación delegado TIENE un controlador de navegación como un nombre de propiedad, derecho?
    error: la propiedad ‘navigationController’ no se encuentra en el objeto de tipo ‘AppDelegate *’
    Esto sólo funciona si se va a almacenar el controlador de navegación en delegado de la aplicación. Este no es un estándar.

    OriginalEl autor Dan Ray

  2. 10

    Puede utilizar la siguiente instruccion:

    [(UINavigationController *)self.view.window.rootViewController pushViewController:vc animated:YES];

    A mí me funciona 😀

    OriginalEl autor JERC

  3. 0

    Echar un vistazo a UIViewController del navigationController y tabBarController propiedades. Estos devolverá el correspondiente navigationController o tabBarController que la UIViewController ‘pertenece’ a.

    Así que usted puede hacer algo como:

    [customController.navigationController pushViewController:newController animated:YES];
    //Similarly for tabBarController ...
    Estoy un poco confundido en lo que quieres decir. La pila tendría este aspecto. 1.Navegación Controlador -> RootViewController -> 2.Navegación Controlador -> AViewConroller Y lo que yo quiero es que AViewController para empujar un nuevo viewcontroller a 1.Navegación Controlador. Pero No importa lo que yo trato mantiene empujando a la 2.Navegación Controlador? Si que deja más claro idk. Lo siento.
    Hola, he actualizado mi post para que coincida con tu comentario. Es un poco extraño pila de dos controladores de navegación ya que hace la misma cosa como la otra. De todos modos checkout mi sugerencia de como podría funcionar, pero no estoy 100% seguro.
    Lo siento, sé que es extraño que yo en realidad no dar un segundo plano. Tengo una tab bar controller que tiene 3 ficha/controladores. 1. Casa 2. Búsqueda 3. Los ajustes. Dentro de la raíz de vista hay 3 diferentes tablas que han de navegación controlles->tabla de vista de los controladores. Estos muestran alertas, una lista de observación, y búsquedas anteriores. Así, en la lista de favoritos de controlador de vista cuando se presiona la vista de los documentos de flecha quiero que se tome sobre la parte superior de navegación controlador de forma que muestra la totalidad de la pantalla. Pero por desgracia, ese código que me diste no funciona.
    Ok estoy confundido en cuanto a lo que usted realmente desea. ¿Qué significa «tomar sobre la parte superior de navegación de la controladora por lo que muestra la pantalla entera»? Su primera pregunta fue cómo obtener acceso a un controlador de navegación de uno de sus apilados de vista de los controladores y para que se utiliza el navigationController de la propiedad. Así que a partir de cualquiera de los apilados de vista de los controladores puede llamar navigationController para acceder a los ‘padres’ de navegación controlador. Tal vez usted puede editar su pregunta original con más detalle porque no estoy seguro de que me siga exactamente.
    Lo siento, no tome más, basta con pulsar un punto de vista. Y mi Pregunta es como conseguir el original de la pila, no la segunda pila.

    OriginalEl autor nebs

Dejar respuesta

Please enter your comment!
Please enter your name here