2012-05-30 7 views
14

Creé un nuevo controlador de navegación en mi guión gráfico (¡no programáticamente!) Y lo configuré como "Root View Controller" para un UIViewController regular y agregué un botón que dice- reenviar al siguiente controlador de vista (este controlador de segunda vista es un controlador de vista que quiero que tenga un botón Atrás para vincular al controlador de vista inicial). Ahora, cada vez que trato de vincular el botón con el siguiente controlador de vista, "no se admite presionar un controlador de navegación".Impulsar un controlador de navegación no es compatible: realizar segues

me ayude por favor, y gracias

EDIT: accidentalmente con subclases UINavigationController, y no UIViewController en mi clase. Gracias de todos modos.

+0

compruebe lo siguiente https://github.com/cruffenach/Mobile-Tuts-Plus-UIStoryboard –

+0

en fin, por favor? –

+0

¿Has cambiado 'RootiViewController' para ser un' UIViewController'? – woz

Respuesta

10

He intentado esto y no tienen problemas, todo hecho en su IB sin código adicional requerido ...

  1. iniciar un nuevo proyecto, "Single View Application" utilizando tablas de historia
  2. Seleccionar guión gráfico y eliminar las vistas producidas.
  3. Arrastre en un nuevo regulador de la navegación (que traerá una vista de tabla con él)
  4. eliminar la tabla y el controlador de vista de la tabla, por lo que se acaba de dejar con el regulador de la navegación
  5. Arrastre en un controlador de vista normal
  6. Haga clic derecho y arrastre desde el Controlador de navegación a la nueva Vista y seleccione "Relación - Controlador de vista raíz"
  7. Arrastre un "Elemento de botón de barra" a la barra de navegación que debería estar visible en la parte superior de su ViewController, puede cambie el nombre de este Reenviar si lo desea.
  8. Ahora arrastre en otro controlador de vista que es el que su botón "Adelante" presionará para ver.
  9. clic derecho y arrastre desde el botón de la barra a la segunda vista, controlador, y elegir la opción "Push"

Ejecutar el proyecto y obtendrá una visión individual con una barra de navegación y el botón, hacer clic con el botón Empuje la otra vista y le da un botón Atrás para volver al primer controlador de visualización. Trataré de publicar una imagen de mi guión gráfico si me sirve.

PushViewControllers

plasma

+0

Gracias! ¿otro (pequeño) que puedo hacer este "empuje" programáticamente? Quiero decir, quiero hacer una declaración if, por ejemplo, solo si la aplicación ha sido autorizada para el centro de juegos. ¿Cómo puedo hacer eso? –

+0

BTW- a su manera me arroja este error: TwentyOneQuestions [37746: 1bb03] *** Aplicación de terminación debido a excepción no detectada 'NSInvalidArgumentException', razón: 'No se admite presionar un controlador de navegación' *** Primera pila de llamadas: (0x132f022 0x26e6cd6 0x38cf1b 0xb36452d 0x38ca24 0x6e8de6 0x6dd4d0 0x1330e99 0x2b514e 0x4f3a0e 0x1330e99 0x2b514e 0x2b50e6 0x35bade 0x35bfa7 0x35b266 0x2da3c0 0x2da5e6 0x2c0dc4 0x2b4634 0x18e9ef5 0x1303195 0x1267ff2 0x12668da 0x1265d84 0x1265c9b 0x18e87d8 0x18e888a 0x2b2626 0x296d 0x28d5) por terminado llama lanzar una excepción (LLDB) –

+0

sólo se me ocurre que tal vez lo hizo ¿algo mal? ¿Seleccionó un "controlador de vista" simple para las últimas 2 vistas, y no el controlador de navegación? hasta el punto yhr o haga clic con el botón derecho y arrastre las vistas deben ser simples cuadrados blancos con nada en ellos que no sea una barra de estado. La barra de navegación azul se coloca automáticamente una vez que conecta las cajas. – Plasma

0

Para intercambiar puntos de vista Programatically que tendría que seleccionar el segue y darle un identificador como "PushView", entonces llamarlo como esto ....

[self performSegueWithIdentifier:@"PushView" sender:self]; 

Eso programáticamente hará lo mismo que hacer clic en el botón de avance. Te he creado un proyecto de ejemplo con el código discutido anteriormente. Tiene una - (IBAction) con código que puede usar para cambiar la vista por medio de un programa.

PushView.zip

1

que tenían el mismo problema. Quería tener un controlador de navegación en cada guión gráfico, de modo que cada uno se pudiera ejecutar de forma independiente, se depurara individualmente y para que el aspecto fuera correcto con la barra de navegación.

Usando otros enfoques, encontré que el UINavigationController se conservaría del guión gráfico original, que no quería, o que obtendría errores.

Utilizando el AppDelegate en su controlador de vista para establecer el RootViewController trabajó para mí (segue endeudamiento convenciones de nombres de Segue to another storyboard?):

- (void)showStartupNavigationController { 
NSLog(@"-- Loading storyboard --"); 

//Get the storyboard from the main bundle. 
UIStoryboard *storyBoard = [UIStoryboard storyboardWithName:@"Startup" bundle:nil]; 
//The navigation controller, not the view controller, is marked as the initial scene. 
UINavigationController *theInitialViewController = [storyBoard instantiateInitialViewController]; 

NSLog(@"-- Loading storyboard -- Nav controller: %@", theInitialViewController); 

//Remove the current navigation controller. 
[self.navigationController.view removeFromSuperview]; 
UIWindow *window = [(AppDelegate *)[[UIApplication sharedApplication] delegate] window]; 
window.rootViewController = theInitialViewController; 
+0

Posiblemente pueda ayudarlo con esto. Considere http://stackoverflow.com/a/23403979/294884 y http://stackoverflow.com/a/23060746/294884 (siempre es difícil saber "cuál es el problema o la solución" con los controladores de gráficos de pantalla de fricción- contenedores. Si es irrelevante para sus necesidades aquí, no hay daños). – Fattie

0

También quería hacer esto, presentar una pantalla (que tenía una navegación incorporado controlador) cuando el usuario presiona un botón.

En mi primer intento, conecté la transición desde el botón en la pantalla principal al controlador de navegación, y la aplicación se bloqueaba con este error "No es compatible con presionar un controlador de navegación".

Esta es la solución que encontré:

Seleccione la segue desde el botón en la primera pantalla para el control de navegación. Si tenía un identificador, copie su nombre. Luego borra esa transición.

cree un nuevo segue por CTRL-clic en el botón en el primer controlador de vista y arrastrando a la controlador de vista que desea presentar (no al regulador de la navegación que se apuntan a ella), y seleccione PPH en el pequeña ventana emergente.

Luego haga clic en el ícono en el medio de la transición y pegue el nombre que copió en el primer paso como un identificador para él.

IB le dará una advertencia "La escena es inalcanzable debido a la falta de puntos de entrada y no tiene un identificador para el acceso en tiempo de ejecución a través de -instantViewViewControllerWithIdentifier :." No te preocupes, funciona perfectamente.

Si desea personalizar la cadena que se muestra como el botón Atrás para volver, puede agregar esta línea en el método viewDidLoad DE LA VISTA CONTROLADOR que está siendo mostrados luego se pulsa el botón, que es el niño ver el controlador.
(reemplace "Configuración" con el nombre que necesita)

- (void)viewDidLoad 
{ 
    [super viewDidLoad]; 
    self.navigationController.navigationBar.topItem.title = @"Settings"; 
    ... 

} 
Cuestiones relacionadas