En mi aplicación hay muchas UIViewControllers con UINavigationControllers. Debe haber un botón de «atrás» y un «hogar» UIButton en el UINavigationBar. Todo esto funciona bien.

Pero algunos de mis UIViewControllers tienen nombres largos, y a veces es demasiado pequeño lugar de la izquierda. Estoy tratando de reemplazar el original de la etiqueta del botón «atrás» (se muestra el título de la vista anterior) con una costumbre «de Regreso», pero lo he intentado no funciona:

//Title didn't change
[self.navigationItem.backBarButtonItem setTitle:@"Back"];

//Action didn't set, no response from button ( button didn't do anything )
[self.navigationItem.leftBarButtonItem
   setAction:self.navigationItem.backBarButtonItem.action];

Y necesito el botón «atrás» para tener un estilo como en esta pregunta: Dibujar personalizado botón Atrás de la Barra de Navegación en el iPhone

Es la respuesta en la pregunta de referencia no es suficiente?
En ella se establece (=cambios) vista anterior del título
posibles duplicados de Cómo cambiar el título de la UINavigationBar de nuevo el botón «Atrás»
no es. que la solución no guarda la forma de botón
antes de iOS 7 no es oficial de la API para hacer lo que quieres. No estoy seguro acerca de iOS 7.

OriginalEl autor SentineL | 2011-11-22

6 Comentarios

  1. 6

    Probar este

    UIBarButtonItem *backBarBtnItem = [[UIBarButtonItem alloc] initWithTitle:@"Back" style:UIBarButtonItemStylePlain target:self action:@selector(popViewController)];
    [self.navigationItem setBackBarButtonItem:backBarBtnItem];
    
    - (void)popViewController
    {
        [self.navigationController popViewControllerAnimated:YES];
    }
    que no funciona. Me puede quitar de costumbre botón atrás y añadir mi propia cuenta, sino cómo hacerlo de la forma, como de costumbre?
    para que usted necesita para personalizar el botón de tener esa forma de imagen, supongo…[[UIBarButtonItem alloc] initWithCustomView:customButton];
    eso es un poco bárbaro del código, pero supongo que es que no hay otra solución… Así que, vamos a ser un bárbaro por un tiempo 🙂 Gracias por la respuesta de todos modos.

    OriginalEl autor mihir mehta

  2. 50

    Tratar el siguiente. Sin duda el trabajo:

    - (void)viewDidLoad {
        [super viewDidLoad];
    
        UIImage *buttonImage = [UIImage imageNamed:@"back.png"];
        UIButton *button = [UIButton buttonWithType:UIButtonTypeCustom];
        [button setImage:buttonImage forState:UIControlStateNormal];
        button.frame = CGRectMake(0, 0, buttonImage.size.width, buttonImage.size.height);
        [button addTarget:self action:@selector(back) forControlEvents:UIControlEventTouchUpInside];
    
        UIBarButtonItem *customBarItem = [[UIBarButtonItem alloc] initWithCustomView:button];
        self.navigationItem.leftBarButtonItem = customBarItem;
        [customBarItem release];
    }
    
    - (void)back {
        [self.navigationController popViewControllerAnimated:YES];
    }

    Asegúrese de que tiene un botón de imagen con el tamaño de una barra de navegación en el botón atrás de su carpeta de recursos con el nombre back.png.

    Dude si cualquier otra ayuda que se requiere.

    Me parece que puede hacer que la costumbre botón atrás indistinguible de la bolsa de iOS botón atrás por la configuración de una imagen para el resaltado de estado, como este: [botón setImage:highlightedButtonImage forState:UIControlStateHighlighted];
    ¿por qué no puedo agregar un título a mi costumbre botón atrás con este código? [button setTitle:@"Back" forState:UIControlStateNormal];
    Barra de navegación tiene botón de tipo UIBarButton.Usted puede crear UIBarButton elementos con contenido personalizado o crear estándar de los elementos del sistema en función de sus necesidades.
    En realidad estoy usando tu código de arriba y hay esta línea [button setImage:buttonImage forState:UIControlStateNormal]; pensé que podría agregar [button setTitle:@"Back" forState:UIControlStateNormal]; justo después, y que iba a funcionar, pero no…
    El problema con este enfoque es que usted no personalizar el botón de volver atrás, sino que la adición de un «leftBarButtonItem», que no es la misma cosa.

    OriginalEl autor Anil Kothari

  3. 7

    Objetivo:
    la personalización de todos botón atrás en UINavigationBar a un icono blanco

    Pasos:
    1. en «didFinishLaunchingWithOptions» método de AppDelete:

    UIImage *backBtnIcon = [UIImage imageNamed:@»navBackBtn»];

    if (SYSTEM_VERSION_GREATER_THAN_OR_EQUAL_TO(@"7.0")) {
        [UINavigationBar appearance].tintColor = [UIColor whiteColor];
        [UINavigationBar appearance].backIndicatorImage = backBtnIcon;
        [UINavigationBar appearance].backIndicatorTransitionMaskImage = backBtnIcon;
    }else{
    
        UIImage *backButtonImage = [backBtnIcon resizableImageWithCapInsets:UIEdgeInsetsMake(0, backBtnIcon.size.width - 1, 0, 0)];
        [[UIBarButtonItem appearance] setBackButtonBackgroundImage:backButtonImage  forState:UIControlStateNormal barMetrics:UIBarMetricsDefault];
    
        [[UIBarButtonItem appearance] setBackButtonTitlePositionAdjustment:UIOffsetMake(0, -backButtonImage.size.height*2) forBarMetrics:UIBarMetricsDefault];
    }

    2.en el «viewDidLoad» método común de la super clase ViewController:

     if (SYSTEM_VERSION_GREATER_THAN_OR_EQUAL_TO(@"7.0")) {
            UIBarButtonItem *backItem = [[UIBarButtonItem alloc] initWithTitle:@""
                                                                         style:UIBarButtonItemStylePlain
                                                                        target:nil
                                                                        action:nil];
            [self.navigationItem setBackBarButtonItem:backItem];
        }else{
            //do nothing
        }

    OriginalEl autor Jagie

  4. 2

    Si estás haciendo esto por todo el lugar como yo, es mejor que la aplicación de Anil de la solución como una categoría:

    @interface UIViewController (CustomBackButton)
    
    - (void) setCustomBackButton;
    - (void) back;
    
    @end
    
    @implementation UIViewController (CustomBackButton)
    
    - (void) setCustomBackButton
    {
        UIImage *buttonImage = [UIImage imageNamed:@"back.png"];
        UIButton *button = [UIButton buttonWithType:UIButtonTypeCustom];
        [button setImage:buttonImage forState:UIControlStateNormal];
        button.frame = CGRectMake(0, 0, buttonImage.size.width, buttonImage.size.height);
        [button addTarget:self action:@selector(back) forControlEvents:UIControlEventTouchUpInside];
        UIBarButtonItem *customBarItem = [[UIBarButtonItem alloc] initWithCustomView:button];
        self.navigationItem.leftBarButtonItem = customBarItem;
    }
    
    - (void) back
    {
        [self.navigationController popViewControllerAnimated:YES];
    }
    
    @end

    OriginalEl autor Michael

  5. 1

    Más simplemente:

    UIBarButtonItem *barBtnItem = 
      [[UIBarButtonItem alloc]initWithTitle:@"Indietro"
                                      style:UIBarButtonItemStyleBordered
                                     target:self
                                     action:@selector(pop)];
    [barBtnItem setTintColor:[UIColor whiteColor]];
    self.navigationItem.leftBarButtonItem = barBtnItem;

    OriginalEl autor giuseppe

  6. 0

    Suponga que tiene dos controladores – Controller1 y Controller2. Controller2 es empujado desde Controller1. Así que antes de empujar la Controller2 en el navigationController de Controller1

    Controller2 *controller2 = [[[Controller2 alloc]  init]autorelease];
    self.navigationItem.hidesBackButton = YES;   

    Ahora, en el viewDidLoad: método de Controller2, añadir el siguiente fragmento de código

    UIBarButtonItem *backBarButtonItem =[[[UIBarButtonItem alloc]initWithTitle:@"Back" style:UIBarButtonItemStyleBordered target:self action:@selector(goBackToAllPets:)]autorelease];
    self.navigationItem.leftBarButtonItem = backBarButtonItem;

    y en el backButtonClicked método, usted puede realizar las comprobaciones que desee.

    OriginalEl autor simply_me

Dejar respuesta

Please enter your comment!
Please enter your name here