change backbutton with custom image and textcolor

2019-07-15 09:11发布

问题:

I want to change the backbutton appearance for my backbutton in my navigation bar. For that I have this piece of code.

UIImage *backButtonImage = [UIImage imageNamed:@"backbutton.png"];
UIButton *backbutton = [UIButton buttonWithType:UIButtonTypeCustom];
backbutton.backgroundColor = [UIColor colorWithPatternImage:backButtonImage];
backbutton.titleLabel.text = @"back";
backbutton.titleLabel.textColor= [UIColor colorWithRed:50/255.0
                                                 green:158/255.0
                                                  blue:218/255.0
                                                 alpha:1.0];

backbutton.frame = CGRectMake(0, 0, backButtonImage.size.width, backButtonImage.size.height);
UIBarButtonItem * back = [[UIBarButtonItem alloc] initWithCustomView:backbutton];
[backbutton addTarget:self action:@selector(back_Clicked) forControlEvents:UIControlEventTouchUpInside];
self.navigationItem.leftBarButtonItem = back;

But still I get the standard back button. Any help ?

回答1:

using bellow code for your requirement..

- (void)viewDidLoad
{
        ///write your code

        UIImage *backButtonImage = [UIImage imageNamed:@"backbutton.png"];
        UIButton *backbutton = [UIButton buttonWithType:UIButtonTypeCustom];
        //[backbutton setImage:backButtonImage forState:UIControlStateNormal];//this line for set only image on button
        [backbutton setBackgroundImage:backButtonImage forState:UIControlStateNormal];
        [backbutton setTitle:@"Back" forState:UIControlStateNormal];
        backbutton.frame = CGRectMake(0, 0, backButtonImage.size.width, backButtonImage.size.height);
        UIBarButtonItem * back = [[UIBarButtonItem alloc] initWithCustomView:backbutton];
        [backbutton addTarget:self action:@selector(back_Clicked) forControlEvents:UIControlEventTouchUpInside];
        self.navigationItem.leftBarButtonItem = back;
}

when back button clicked bellow method call and you will go to previous viewcontroller

-(void)back_Clicked{
      [self.navigationController popViewControllerAnimated:YES];
}


回答2:

Put your code to customize back button before pushing that viewController to the stack. And set BackBarButtonItem , not leftBarButtonItem.

UIImage *image = [UIImage imageNamed:@"backbutton.png"];
UIButton *backbutton = [UIButton buttonWithType:UIButtonTypeCustom];
backbutton.bounds = CGRectMake( 0, 0, image.size.width, image.size.height );
[backbutton setImage:image forState:UIControlStateNormal];
backbutton.titleLabel.textColor = [UIColor blueColor];
UIBarButtonItem *back = [[UIBarButtonItem alloc] initWithCustomView:backbutton];
[[self navigationItem] setBackBarButtonItem: back];
[self.navigationController pushViewController:yourViewControllerObject animated:YES];


回答3:

Use

 self.navigationItem.leftBarButtonItem = back;

Instead of

 self.navigationController.navigationItem.leftBarButtonItem = back;


回答4:

[self.navigationItem setLeftBarButtonItem:[[UIBarButtonItem alloc] initWithCustomView:[self buttonWithImage:@"backButton" heighlightImageName:@"backButton" buttonFrame:CGRectMake(2, 1, 30, 30) selectorName:@selector(buttonBackClicked:) target:self]]];


- (UIButton*)buttonWithImage:(NSString*)normalImageName heighlightImageName:(NSString*)heighlightImageName buttonFrame:(CGRect)buttonFrame selectorName:(SEL)selectorName target:(id)target
{
    UIButton *tempButton = [UIButton buttonWithType:UIButtonTypeRoundedRect];
    [tempButton setFrame:buttonFrame];
    [tempButton addTarget:target action:selectorName forControlEvents:UIControlEventTouchUpInside];
    [tempButton setImage:[self getImageFromResource:normalImageName] forState:UIControlStateNormal];
    [tempButton setImage:[self getImageFromResource:heighlightImageName] forState:UIControlStateHighlighted];
    return tempButton;
}
- (UIImage*)getImageFromResource:(NSString*)imageName
{
    return [UIImage imageWithContentsOfFile:[[NSBundle mainBundle] pathForResource:imageName ofType:@"png"]];
}


回答5:

   IButton *favButton = [[UIButton alloc] init];

     [favButton setImage:[UIImage imageNamed:@"unselected.png"]     forState:UIControlStateNormal];
     [favButton addTarget:self action:@selector(favouriteButtonClicked:)
    forControlEvents:UIControlEventTouchUpInside];

 UIBarButtonItem *button = [[UIBarButtonItem alloc]
                            initWithCustomView:favButton];

 self.navigationItem.rightBarButtonItem = button;

  [button release];
  [favButton release];