firetrap
firetrap

Reputation: 2005

iOS get default UISearchBar icon to set in UIButton

Iam trying to get the default UISearchBar icon (Magnifying glass) to set in another UIButton.

PS: I don't want to use a png downloaded from somewhere i want to use the default one.

func to add the button with a custom image just to show some example:

func addRightNavigationButton(){
    let buttonBack: UIButton = UIButton.buttonWithType(UIButtonType.Custom) as! UIButton
    buttonBack.frame = CGRectMake(0, 0, 30, 33)
    buttonBack.setImage(UIImage(named:"search.png"), forState: UIControlState.Normal)
    buttonBack.addTarget(self, action: "barButtonItemClicked:", forControlEvents: UIControlEvents.TouchUpInside)
    var rightBarButtonItem: UIBarButtonItem = UIBarButtonItem(customView: buttonBack)
    self.navigationItem.setRightBarButtonItem(rightBarButtonItem, animated: false)
}

Upvotes: 1

Views: 1723

Answers (3)

Manikandan
Manikandan

Reputation: 1225

You can use this UIImage Extension to get System icons anywhere in your app.

import UIKit

extension UIImage {

    public convenience init?(_ systemItem: UIBarButtonItem.SystemItem) {

        guard let sysImage = UIImage.imageFrom(systemItem: systemItem)?.cgImage else {
            return nil
        }

        self.init(cgImage: sysImage)
    }

    private class func imageFrom(systemItem: UIBarButtonItem.SystemItem) -> UIImage? {

        let sysBarButtonItem = UIBarButtonItem(barButtonSystemItem: systemItem, target: nil, action: nil)

        //MARK:- Adding barButton into tool bar and rendering it.
        let toolBar = UIToolbar()
        toolBar.setItems([sysBarButtonItem], animated: false)
        toolBar.snapshotView(afterScreenUpdates: true)

        if  let buttonView = sysBarButtonItem.value(forKey: "view") as? UIView{
            for subView in buttonView.subviews {
                if subView is UIButton {
                    let button = subView as! UIButton
                    let image = button.imageView!.image!
                    return image
                }
            }
        }
        return nil
    }
}

This is an example of how do we use it:

 let button = UIButton() ;
 let systemImage = UIImage(systemItem: UIBarButtonSystemItem.search) ;
 button.setImage(systemImage, for: .normal)

Upvotes: 0

AWebster
AWebster

Reputation: 141

Updated for Swift 3

let searchBtn : UIBarButtonItem = UIBarButtonItem(barButtonSystemItem: UIBarButtonSystemItem.search, target: self, action: #selector(self.searchFunction))
self.navigationItem.rightBarButtonItem = searchBtn;

Upvotes: 1

Nishant
Nishant

Reputation: 12617

In Objective-C:

UIBarButtonItem *searchItem = [[UIBarButtonItem alloc] initWithBarButtonSystemItem:UIBarButtonSystemItemSearch target:self action:@selector(searchButtonItemClicked:)];
[self.navigationItem setRightBarButtonItem:searchItem animated:FALSE];

In Swift 1.2:

let searchItem : UIBarButtonItem = UIBarButtonItem(barButtonSystemItem: UIBarButtonSystemItem.Search, target: self, action: "searchButtonItemClicked:")
self.navigationItem.rightBarButtonItem = searchItem;

Upvotes: 3

Related Questions