如何在程序中编程添加系统图标到UIButton?

25

UIButton添加自定义图像或背景很容易,但似乎没有以编程方式设置以下默认iOS图标之一的方法,我知道可以应用于导航栏按钮,但我不需要那个,我想将其应用于简单的UIButton,有什么提示吗?

输入图像描述


1
你可以在网上找到这些图标!比如在这里:https://icons8.com - Sweeper
5个回答

48

对于 Swift 5,语法如下:

button.setImage(UIImage(systemName: "search"), for: .normal)

您还可以通过添加 SymbolConfiguration 来设置图标的权重:

let boldConfig = UIImage.SymbolConfiguration(weight: .bold)
let boldSearch = UIImage(systemName: "search", withConfiguration: boldConfig)

button.setImage(boldSearch, for: .normal)

请参考苹果文档中的可用名称(API列),或者在界面构建器中选择UIButton并在属性检查器中选择Image,这将为您提供所有可用图标的列表。

Interface Builder 图标


1
您需要设置@available属性来检查iOS版本。 - Ashutosh Shukla
系统本身提供了很多选项,这是一个不错的选择。 - arango_86
为什么这对我不起作用?我的按钮最终变成了空的。我有一个条件语句,只有当iOS版本为13+时才会尝试执行上面的代码。 - Brian Reinhold
@BrianReinhold 请尝试使用名称“magnifyingglass”。 - aashah7

3
我找到了2521个系统图标,以数字值形式表示。
@available(iOS 13.0, *)
@objc public extension UIImage{

    var assetName: String? {
        guard let imageAsset = imageAsset else { return nil }
        return imageAsset.value(forKey:"assetName") as? String
    }

    static var square_and_arrow_up: UIImage? {
        return UIImage(systemName: "square.and.arrow.up")
    }
    static var square_and_arrow_up_fill: UIImage? {
        return UIImage(systemName: "square.and.arrow.up.fill")
    }
    static var square_and_arrow_down: UIImage? {
        return UIImage(systemName: "square.and.arrow.down")
    }
    ...

截图: 截图 GitHub:链接


3
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
    }
}

这是一个关于如何使用它的例子:
 let button = UIButton() ;
 let systemImage = UIImage(systemItem: .trash) ;
 button.setImage(systemImage, for: .normal)

2
最初的回答:现在你只需要执行以下操作:
button.setImage(UIImage(.search), for: .normal)

我现在使用 Swift 4 编写 IOS 9 或更高版本的代码。 - HoereeBauke

-2
var logoImage :[UIImage?] = []
// make an array of UIImage
// load image in asset and append in array
@IBOutlet weak var table1: UITableView!
override func viewDidLoad() {
    super.viewDidLoad()
    logoImage.append(UIImage(named: "image0"))
    logoImage.append(UIImage(named: "image1"))
    logoImage.append(UIImage(named: "image2"))
    logoImage.append(UIImage(named: "image3"))
    logoImage.append(UIImage(named: "image4"))

func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell {
    if let cell = tableView.dequeueReusableCell(withIdentifier: "CustomCell") as? CustomCell{
       cell.iconImage.image = self.logoImage[indexPath.row]
        return cell
    }
    return UITableViewCell()
}

请注释您的代码! - Wo_0NDeR ᵀᴹ
问题在哪里? - Hritik Singh

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接