Ashutosh
Ashutosh

Reputation: 5742

How to set the image on rightBarButtonItem of UINavigationBar?

I am trying to set the image on rightBarButtonItem and its fine but the only thing wrong is the background behind this image which has more width than my image. Anybody has any idea how to fix this. Code:

[self.navigationItem setRightBarButtonItem:[[UIBarButtonItem alloc] initWithImage:[UIImage imageNamed:@"action_btn.png"] style:UIBarButtonItemStyleBordered target:self action:@selector(actionButtonClicked:)] animated:YES];

Upvotes: 8

Views: 13452

Answers (3)

King-Wizard
King-Wizard

Reputation: 15694

In Swift:

let infoImage = UIImage(named: "my-icon")
let imgWidth = infoImage?.size.width
let imgHeight = infoImage?.size.height
let button:UIButton = UIButton(frame: CGRect(x: 0,y: 0,width: imgWidth!, height: imgHeight!))
button.setBackgroundImage(infoImage, forState: .Normal)
button.addTarget(self, action: Selector("openInfo"), forControlEvents: UIControlEvents.TouchUpInside)
self.navigationItem.rightBarButtonItem = UIBarButtonItem(customView: button)

P.S. UIBarButtonItem(image:style:target:action:) constructor only works for transparent PNG, also I had to set button tintcolor other than clearColor.

Upvotes: 3

Here you can set the image on rightBarButtonItem of NavigationBar as follows:

UIButton *button1 = [[UIButton alloc] init];
button1.frame=CGRectMake(0,0,105,30);
[button1 setBackgroundImage:[UIImage imageNamed: @"image1.png"] forState:UIControlStateNormal];
[button1 addTarget:appDelegate action:@selector(Open_Link1) forControlEvents:UIControlEventTouchUpInside];

self.navigationItem.rightBarButtonItem = [[UIBarButtonItem alloc]initWithCustomView:button1];
[button1 release];

Please let me know if you have any more questions.

Upvotes: 19

Odys
Odys

Reputation: 9090

Im not in XCode at the moment, so I cannot post code. The procedure goes like this

  1. Create the UIBarButtonItem with default initializer
  2. Create the UIImage
  3. Get the CGRect from the image dimensions,
  4. Set the UIBarButtonItem.frame to that dimensions

If it doesn't match 100%, consider adding the bounds of the button to the image dimensions before setting the button's frame

Upvotes: -1

Related Questions