It's easy to add a custom image or a background for a UIButton
, but there seems to be no programmatic way to set one of the following default iOS icons for a UIButton
, I know it can be applied to navigation bar buttons, I don't need that, I want to apply it to a simple UIButton
, any hints?
可以将文章内容翻译成中文,广告屏蔽插件可能会导致该功能失效(如失效,请关闭广告屏蔽插件后再试):
问题:
回答1:
For Swift 5 the syntax is:
button.setImage(UIImage(systemName: "search"), for: .normal)
You can also set the weight of the icon by adding SymbolConfiguration
:
let boldConfig = UIImage.SymbolConfiguration(weight: .bold)
let boldSearch = UIImage(systemName: "search", withConfiguration: boldConfig)
button.setImage(boldSearch, for: .normal)
See: Apple documentation for available names (API column) or go to InterfaceBuilder, select UIButton and in Attributes Inspector select Image which will give you list of all available icons.
回答2:
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: .trash) ;
button.setImage(systemImage, for: .normal)
回答3:
Now you can just do
button.setImage(UIImage(.search), for: .normal)
回答4:
From Apple's documentation: init(type:)