How to programmatically add system icons for UIButton?

Itโ€™s easy to add a custom image or background for UIButton, but there seems to be no programmatic way to set one of the following iOS icons as default for UIButton, I know that it can be applied to the navigation bar buttons, I donโ€™t need it, I want to apply it to a simple one UIButton, any hints?

enter image description here

+5
source share
3 answers
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 we use it:

 let button = UIButton() ;
 let systemImage = UIImage(systemItem: .trash) ;
 button.setImage(systemImage, for: .normal)
+2
source

Now you can just do

button.setImage(UIImage(.search), for: .normal)
0
source

From the Apple documentation: init(type:)

-3
source

All Articles