Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

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];
like image 415
Ashutosh Avatar asked Jul 23 '11 18:07

Ashutosh


2 Answers

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.

like image 77
AppAspect Avatar answered Oct 19 '22 15:10

AppAspect


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.

like image 24
King-Wizard Avatar answered Oct 19 '22 15:10

King-Wizard