Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

How to set image for bar button with swift?

I am trying to set an Image for bar button Item for that I have an image like:

enter image description here

with resolution 30 * 30 but while I assign this Image to Bar button Its looks like:

enter image description here

I have assigned image this way :

enter image description here

and If I try this way like making an IBOutlet for the button and set Image programatically form this question and code for that is:

 // Outlet for bar button  @IBOutlet weak var fbButton: UIBarButtonItem!  // Set Image for bar button var backImg: UIImage = UIImage(named: "fb.png")! fbButton.setBackgroundImage(backImg, forState: .Normal, barMetrics: .Default) 

but nothing happend with this,

Can anybody tell me what I am doing wrong?

or which is the batter way to do this?

like image 702
Dharmesh Kheni Avatar asked Dec 16 '14 07:12

Dharmesh Kheni


1 Answers

I have achieved that programatically with this code:

import UIKit  class ViewController: UIViewController {      override func viewDidLoad() {         super.viewDidLoad()         //create a new button         let button: UIButton = UIButton.buttonWithType(UIButtonType.Custom) as! UIButton         //set image for button         button.setImage(UIImage(named: "fb.png"), forState: UIControlState.Normal)         //add function for button         button.addTarget(self, action: "fbButtonPressed", forControlEvents: UIControlEvents.TouchUpInside)         //set frame         button.frame = CGRectMake(0, 0, 53, 31)          let barButton = UIBarButtonItem(customView: button)         //assign button to navigationbar         self.navigationItem.rightBarButtonItem = barButton     }      //This method will call when you press button.     func fbButtonPressed() {          println("Share to fb")     } } 

And result will be:

enter image description here

Same way you can set button for left side too this way:

self.navigationItem.leftBarButtonItem = barButton 

And result will be:

enter image description here

And if you want same transaction as navigation controller have when you go back with default back button then you can achieve that with custom back button with this code:

func backButtonPressed(sender:UIButton) {     navigationController?.popViewControllerAnimated(true) } 

For swift 3.0:

import UIKit  class ViewController: UIViewController {      override func viewDidLoad() {         super.viewDidLoad()         //create a new button         let button = UIButton.init(type: .custom)         //set image for button         button.setImage(UIImage(named: "fb.png"), for: UIControlState.normal)         //add function for button         button.addTarget(self, action: #selector(ViewController.fbButtonPressed), for: UIControlEvents.touchUpInside)         //set frame         button.frame = CGRect(x: 0, y: 0, width: 53, height: 51)          let barButton = UIBarButtonItem(customView: button)         //assign button to navigationbar         self.navigationItem.rightBarButtonItem = barButton     }      //This method will call when you press button.     func fbButtonPressed() {          print("Share to fb")     } } 

For swift 4.0:

import UIKit  class ViewController: UIViewController {      override func viewDidLoad() {         super.viewDidLoad()         //create a new button         let button = UIButton(type: .custom)         //set image for button         button.setImage(UIImage(named: "fb.png"), for: .normal)         //add function for button         button.addTarget(self, action: #selector(fbButtonPressed), for: .touchUpInside)         //set frame         button.frame = CGRect(x: 0, y: 0, width: 53, height: 51)          let barButton = UIBarButtonItem(customView: button)         //assign button to navigationbar         self.navigationItem.rightBarButtonItem = barButton     }      //This method will call when you press button.     @objc func fbButtonPressed() {          print("Share to fb")     } } 
like image 188
Dharmesh Kheni Avatar answered Sep 23 '22 15:09

Dharmesh Kheni