iosswiftuiimageuibarbuttonitem

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?


Solution

  • 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")
        }
    }