2010-05-17 63 views
10

He agregado una barra de navegación a un UIViewController. Se muestra desde otro UIViewController solamente. Me gustaría tener un botón de atrás del lado izquierdo con forma similar a una flecha, al igual que el botón de barra de navegación normal. Parece que solo puedo agregar un botón de barra a través de IB. Supongo que el botón Atrás necesita ser agregado programáticamente. ¿Alguna sugerencia sobre cómo debería hacer esto?Agregar el botón Atrás a la barra de navegación

Actualmente, en RootController, presiono otro UIViewController (viewB) simplemente haciendo un addSubView. En viewB, quiero mostrar la barra de navegación. La aplicación se basa en la vista, no en el controlador de navegación.

Respuesta

13

Si estás utilizando un controlador de navegación:

MyViewController *_myViewController = [[MyViewController alloc] initWithNibName:@"MyViewController" bundle:nil]; 
[[self navigationController] pushViewController:_myViewController animated:YES]; 
UIBarButtonItem *_backButton = [[UIBarButtonItem alloc] initWithTitle:@"Back" style:UIBarButtonItemStyleDone target:nil action:nil]; 
self.navigationItem.backBarButtonItem = _backButton; 
[_backButton release], _backButton = nil; 
[_myViewController release], _myViewController = nil; 

Si no está utilizando un controlador de navegación, busque en los Three20 style componentes para hacer botones de la barra de encargo.

+0

Eso no está haciendo nada. – 4thSpace

+0

Tendrá que ajustarlo al código de su proyecto en particular. Es posible que desee editar su pregunta para incluir fragmentos de código relevantes, donde se encuentra en su primer controlador de vista y empujando su segundo controlador de vista. –

+0

He actualizado la pregunta. Gracias. – 4thSpace

7

lo he hecho de la siguiente manera

En viewDidLoad Método tengo este código:

UINavigationBar *navBar = [[UINavigationBar alloc] initWithFrame:CGRectMake(0, 0, [UIScreen mainScreen].bounds.size.width, 41)]; 
    navBar.delegate = self; 

    UINavigationItem *backItem = [[UINavigationItem alloc] initWithTitle:@"Back"]; 
    [navBar pushNavigationItem:backItem animated:NO]; 
    [backItem release]; 

    UINavigationItem *topItem = [[UINavigationItem alloc] initWithTitle:@"Your Title"]; 
    [navBar pushNavigationItem:topItem animated:NO]; 
    topItem.leftBarButtonItem = nil; 
    [topItem release]; 

    [self.view addSubview:navBar]; 
    [navBar release]; 

A continuación, agregue la conformidad con el protocolo UINavigationBarDelegate en la cabecera y poner en práctica el método delegado de esta manera:

- (BOOL)navigationBar:(UINavigationBar *)navigationBar shouldPopItem:(UINavigationItem *)item 
{ 
    //if you want to dismiss the controller presented, you can do that here or the method btnBackClicked 

    return NO; 
} 
+0

¿lo usaste en cualquier aplicación que enviaste a Apple? si es así, ¿lo aprobaron? – viplezer

+0

Sí, no hay una API privada utilizada en este enfoque –

0

Otro enfoque para resolver este problema es establecer la propiedad de los elementos para la barra de navegación en lugar de empujar consecutivamente los elementos de la barra hacia nav barra de la pila:

//Define myFrame based on your needs 
let navigationBar = UINavigationBar(frame: myFrame) 
let backItem = UINavigationItem(title: "Back") 
let topItem = UINavigationItem(title: "My Title") 
navigationBar.setItems([backItem,topItem], animated: false) 
Cuestiones relacionadas