¿Retroceder el button con flecha programáticamente?

Por lo general, cuando usas un UINavigationController obtienes un button de retroceso que tiene una flecha en el lado izquierdo del mismo. La cuestión es que no estoy usando un UINavigationController así que por eso estoy preguntando. De todos modos aquí hay una foto:

introduzca la descripción de la imagen aquí

Hasta ahora tengo un UIBarButtonItem regular que actualmente es simplemente cuadrado sin esa flecha en el lado izquierdo de él.

¿Hay alguna manera de hacer un button que tenga una flecha en el lado izquierdo así y agregarlo a mi UINavigationBar? También he mirado a mi alnetworkingedor y parece que UIButton tipo 101 no está documentado y provocará un rechazo. ¡Necesito una solución que sea aceptada!

¡Gracias!

Puede darle al button una image de background que lo haga parecer el button angulado nativo:

 testButton = [[UIButton alloc] initWithFrame:CGRectMake(80, 30, 160, 44)]; [testButton setTitle:@"Test Button" forState:UIControlStateNormal]; UIImage *buttonImage = [[UIImage imageNamed:@"angledButton"] resizableImageWithCapInsets:UIEdgeInsetsMake(0, 16, 0, 16)]; [testButton addTarget:self action:@selector(buttonPressed:) forControlEvents: UIControlEventTouchUpInside]; [testButton setBackgroundImage:buttonImage forState:UIControlStateNormal]; 

Es posible que debas modificar eso, pero está en la dirección correcta en que creo.

Por cierto si desea crear un button exactamente como el button Atrás en el controller de navigation, eche un vistazo a este código …

 @implementation UIButton (CustomBackButton) - (UIButton*)configureForBackButtonWithTitle:(NSString*)title target:(id)target action:(SEL)action { // Make the text 6 pixels from above, 8 pixels from the right, and 12 pixels from the left of button's frame. CGFloat padTRL[3] = {6, 8, 12}; // Text must be put in its own UIView, st it can be positioned to mimic system buttons UILabel* label = [[UILabel alloc] init]; label.backgroundColor = [UIColor clearColor]; label.font = [UIFont boldSystemFontOfSize:12]; label.textColor = [UIColor whiteColor]; label.shadowColor = [UIColor darkGrayColor]; label.shadowOffset = CGSizeMake(0, -1); label.text = title; [label sizeToFit]; UIImage* norm = [[UIImage imageNamed:@"backBarButton.png"] stretchableImageWithLeftCapWidth:13 topCapHeight:0]; UIImage* click = [[UIImage imageNamed:@"backBarButtonHover.png"] stretchableImageWithLeftCapWidth:13 topCapHeight:0]; [self setBackgroundImage:norm forState:UIControlStateNormal]; [self setBackgroundImage:click forState:UIControlStateHighlighted]; [self addTarget:target action:action forControlEvents:UIControlEventTouchUpInside]; // Calculate dimensionss CGSize labelSize = label.frame.size; CGFloat controlWidth = labelSize.width+padTRL[1]+padTRL[2]; controlWidth = controlWidth>=norm.size.width?controlWidth:norm.size.width; // Assemble and size the views self.frame = CGRectMake(0, 0, controlWidth, 30); [self addSubview:label]; label.frame = CGRectMake(padTRL[2], padTRL[0], labelSize.width, labelSize.height); return self } @end 

y no necesitas usar toda la image. solo la parte puntiaguda haría … estira la image según la longitud del título …

introduzca la descripción de la imagen aquí

En primer lugar, debes encontrar una image del button Atrás. Utilicé una bonita aplicación llamada Extractor que extrae todos los charts del iPhone. En iOS7 logré recuperar la image llamada UINavigationBarBackIndicatorDefault y estaba en color negro, ya que necesitaba un tinte rojo, cambio el color a rojo usando Gimp.

Luego creé una vista que contiene una image con esa flecha, una label con el text personalizado y, en la parte superior de la vista, tengo un button con una acción. Luego agregué una animation simple (desvanecimiento y traducción).

El siguiente código simula el comportamiento del button de retroceso, incluida la animation.

 -(void)viewWillAppear:(BOOL)animated{ UIImageView *imageView=[[UIImageView alloc] initWithImage:[UIImage imageNamed:@"UINavigationBarBackIndicatorDefault"]]; [imageView setTintColor:[UIColor networkingColor]]; UILabel *label=[[UILabel alloc] init]; [label setTextColor:[UIColor networkingColor]]; [label setText:@"Blog"]; [label sizeToFit]; int space=6; label.frame=CGRectMake(imageView.frame.origin.x+imageView.frame.size.width+space, label.frame.origin.y, label.frame.size.width, label.frame.size.height); UIView *view=[[UIView alloc] initWithFrame:CGRectMake(0, 0, label.frame.size.width+imageView.frame.size.width+space, imageView.frame.size.height)]; view.bounds=CGRectMake(view.bounds.origin.x+8, view.bounds.origin.y-1, view.bounds.size.width, view.bounds.size.height); [view addSubview:imageView]; [view addSubview:label]; UIButton *button=[[UIButton alloc] initWithFrame:view.frame]; [button addTarget:self action:@selector(handleBack:) forControlEvents:UIControlEventTouchUpInside]; [view addSubview:button]; [UIView animateWithDuration:0.33 delay:0 options:UIViewAnimationOptionCurveLinear animations:^{ label.alpha = 0.0; CGRect orig=label.frame; label.frame=CGRectMake(label.frame.origin.x+25, label.frame.origin.y, label.frame.size.width, label.frame.size.height); label.alpha = 1.0; label.frame=orig; } completion:nil]; UIBarButtonItem *backButton =[[UIBarButtonItem alloc] initWithCustomView:view]; } - (void) handleBack:(id)sender{ } 
    Intereting Posts