Cómo agregar barra de navigation a una vista sin controller de navigation

Hola a todos En mi aplicación tengo un menu lateral que se desliza para mostrar una vista de tabla y forma allí. Tengo seguidores que usan el controller de vista de revelado. El segue tiene que conectarse directamente al controller de vista, de lo contrario, la aplicación se bloquea, así que no puedo usar un controller de navigation. Mi pregunta es cómo agrego una barra de navigation con un elemento de button de barra sin un controller de navigation. He hecho todos mis layouts en el tablero de historias.

el tablero de historia tiene el elemento de navegación

la aplicación no

Si bien hay varias forms inteligentes para responder a su pregunta. Acabo de resolverlo programáticamente y escribí el siguiente código en mi viewWillAppear : viewWillAppear (note – viewDidLoad también está bien, pero no se sugiere)

 - (vacío) viewWillAppear: (BOOL) animated {

     UINavigationBar * myNav = [[UINavigationBar alloc] initWithFrame: CGRectMake (0, 0, 320, 50)];
     [UINavigation Bar aparición] .barTintColor = [UIColor lightGrayColor];
     [self.view addSubview: myNav];


     UIBarButtonItem * cancelItem = [[UIBarButtonItem alloc] initWithTitle: @ "Cancel"
                                                                    estilo: UIBarButtonItemStyleBordenetworking
                                                                   objective: uno mismo
                                                                   acción: nada];

     UIBarButtonItem * doneItem = [[UIBarButtonItem alloc] initWithTitle: @ "Done"
                                                                  estilo: UIBarButtonItemStyleBordenetworking
                                                                 objective: auto acción: cero];


     UINavigationItem * navigItem = [[UINavigationItem alloc] initWithTitle: @ "Título de navigation"];
     navigItem.rightBarButtonItem = doneItem;
     navigItem.leftBarButtonItem = cancelItem;
     myNav.items = [NSArray arrayWithObjects: navigItem, nil];

     [UIBarButtonItem appearance] .tintColor = [UIColor blueColor];
 }

Entonces, tiene una barra de navigation blanca con elementos de button de barra azul sin un controller de navigation. Una vez más, existen otras forms de implementarlo en su caso. Espero que esto haya sido útil.

Salida –

introduzca la descripción de la imagen aquí

Actualización

Para agregar imágenes:

 UIImageView *myImage = [[UIImageView alloc] initWithFrame:CGRectMake(0,10,32,32)]; [myImage setImage:[UIImage imageNamed:@"image.png"]]; self.navigationItem.leftBarButtonItem = [[UIBarButtonItem alloc] initWithCustomView:myImage]; [self.view addSubview:myImage]; 

Hay una forma de usar el elemento de NavigationItem en el generador de interfaces para esto.

Primero agregue un elemento de NavigationItem a su ViewController en el ViewController de la interfaz, como lo haría con un NavigationController . Asegúrese de que la NavigationBar esté visible seleccionando algo que no sea Infernetworking y None en métricas simuladas .

Segundo, en viewDidLoad , simplemente agregue las siguientes líneas:

 - (void)viewDidLoad { [super viewDidLoad]; UINavigationBar *bar = [[UINavigationBar alloc] initWithFrame: frame]; bar.items = @[self.navigationItem]; [self.view addSubview: bar]; } 

En cuanto al frame , el width será el mismo que su ViewController y la height será 44.0 o 64.0 dependiendo de si la status bar es visible o no .

 CGFloat navigationBarHeight = 44.f + [UIApplication shanetworkingApplication].statusBarFrame.size.height; CGRect frame = CGRectMake(0, 0, self.view.frame.size.width, navigationBarHeight); 

Y si desea respaldar diferentes orientaciones, use NSLayoutConstraints :

  CGFloat navigationBarHeight = 44.f + [UIApplication shanetworkingApplication].statusBarFrame.size.height; [self.view addConstraints: @[ [NSLayoutConstraint constraintWithItem: self.view attribute: NSLayoutAttributeLeft relatedBy: NSLayoutRelationEqual toItem: bar attribute: NSLayoutAttributeLeft multiplier: 1.0 constant: 0.0], [NSLayoutConstraint constraintWithItem: self.view attribute: NSLayoutAttributeRight relatedBy: NSLayoutRelationEqual toItem: bar attribute: NSLayoutAttributeRight multiplier: 1.0 constant: 0.0], [NSLayoutConstraint constraintWithItem: self.view attribute: NSLayoutAttributeTop relatedBy: NSLayoutRelationEqual toItem: bar attribute: NSLayoutAttributeTop multiplier: 1.0 constant: 0.0], [NSLayoutConstraint constraintWithItem: bar attribute: NSLayoutAttributeHeight relatedBy: NSLayoutRelationEqual toItem: nil attribute: NSLayoutAttributeNotAnAttribute multiplier: 1.0 constant: navigationBarHeight], ]];