Estoy desarrollando una aplicación para iOS 4.2+.
Yo subclases mi UINavigationController para insertar dos UIImageView y hacer que la barra de navegación look personalizado.
Todo está funcionando muy bien, pero tengo un pequeño problema.
He creado personalizado UIBarButtonItem y dentro de mi punto de vista de los controladores de las puse con :

self.navigationItem.leftBarButtonItem = [[UIBarButtonItem alloc]initWithCustomView:backButton];

Funciona también, pero el problema es que para hacer este trabajo necesito llamar desde:

 - (void)viewDidAppear:(BOOL)animated ;

Por lo que sólo aparece después de la animación y puedo ver el no de botón personalizado 1 segundo antes de que la medida de uno reemplazarlo.

(He probado con viewWillAppear pero nada anexar en navigationbar)

Me gustaría saber si usted tiene una solución, que podría corregir este problema.

PS: yo nunca uso IB, todo está hecho mediante programación.

Gracias de Francia !

EDIT 1: aquí está el código que no muestra nada para viewWillAppear:

- (void)viewWillAppear:(BOOL)animated  {
    [self setTitle:@"Jeu"];

    //Bouton testflight
    TIFButton *testFeedbackButton = [[TIFButton alloc]init];
    [testFeedbackButton setTitle: @"Envoyer un Feedback" forState:UIControlStateNormal];
    [testFeedbackButton addTarget:self action:@selector(launchFeedback) forControlEvents:UIControlEventTouchUpInside];

    UIBarButtonItem *testFeedback = [[UIBarButtonItem alloc] initWithCustomView:testFeedbackButton];

    self.navigationItem.rightBarButtonItem = testFeedback;  

    TIFBackButton *backButton = [[TIFBackButton alloc]init];
    [backButton setTitle: @"Retour" forState:UIControlStateNormal];
    [backButton addTarget:self action:@selector(popToPrecedentViewController) forControlEvents:UIControlEventTouchUpInside];

    self.navigationItem.leftBarButtonItem = [[UIBarButtonItem alloc]initWithCustomView:backButton];
}
debe trabajar con viewWillAppear, pero su backButton vista debe ser instanciado / creado antes de asignar self.navigationItem.leftBarButtonItem.
Por qué usted necesita para llamar desde viewDidAppear? Por qué no no es el trabajo de viewDidLoad?

OriginalEl autor Trivane | 2012-02-15

3 Comentarios

  1. 18

    Digamos que usted tiene dos ViewControllers, a y B, que está empujando B en la pila cuando es superior, y desea personalizar el botón que se muestra cuando B está en la parte superior.

    Normalmente, la manera de hacer esto es establecer ViewController Un‘s navigationItem.backBarButtonItem.

    Lugar, lo que estamos haciendo es dar ViewController B un botón personalizado en el lado izquierdo de la barra de navegación, mediante el establecimiento de su navigationItem.leftBarButtonItem.

    Se ha implementado que enfoque bien, excepto que incluso si usted no establece ViewController Un‘s navigationItem.backBarButtonItem, por defecto, usted todavía obtener un valor predeterminado de botón. De modo que el botón es, probablemente, mostrando en la parte superior de su costumbre botón atrás.

    Si establece ViewController B navigationItem.hidesBackButton = YES entonces usted no debería tener ningún problema.

    Y en el futuro, a la hora de implementar personalizado de los botones de la espalda, debe hacerlo mediante la configuración de navigationItem.backBarButtonItem en lugar de navigationItem.leftBarButtonItem. El ajuste que tendrá que hacer es que con este enfoque, por ejemplo, usted podría usar ViewController Un‘s navigationItem para cambiar el botón que se muestra cuando ViewController B es en la parte superior.

    Gracias, he solucionado el problema. Tienes razón en todo lo que te dije, fue muy útil, pero he encontrado el error que bloqueaba la UIBarButton a aparecer. En efecto, la UIImageView he añadido en la subclase fue de «ocultar» el botón cuando fueron llamados con viewWillAppear. Por lo tanto, dos problemas, cada uno resuelto. De nuevo, gracias !
    El problema con este enfoque es que no se puede establecer el botón atrás para una vista personalizada. Lo mejor que puedes hacer es cambiar la imagen de fondo. Si desea tener más control sobre el aspecto del botón, parece que tienes que ir con la configuración de leftBarButtonItem en ViewController B como el OP lo ha hecho.
    Lo que funcionó para mí fue B.navigationItem.hidesBackButton = YES y B.navigationItem.leftBarButtonItem = <my custom button>.

    OriginalEl autor yuji

  2. 3
    UIBarButtonItem *backButton = [UIBarButtonItem new];
    
    [backButton setTitle:@"Back"];
    
    [[self navigationItem] setBackBarButtonItem:backButton];

    Este código tienes que menciona en el anterior controlador de vista, a continuación, sólo se predeterminado botón atrás llegó en el siguiente controlador de vista.

    Disfrutar!!!!

    OriginalEl autor Prithivi

Dejar respuesta

Please enter your comment!
Please enter your name here