如何以编程方式为 UIButton 添加系统图标?
Posted
技术标签:
【中文标题】如何以编程方式为 UIButton 添加系统图标?【英文标题】:How to add system icons for a UIButton programmatically? 【发布时间】:2016-06-12 08:55:42 【问题描述】:为 UIButton
添加自定义图像或背景很容易,但似乎没有编程方式为 UIButton
设置以下默认 ios 图标之一,我知道它可以应用于导航条形按钮,我不需要,我想把它应用到一个简单的UIButton
,有什么提示吗?
【问题讨论】:
你可以在网上找到这些图标!喜欢这里:icons8.com 【参考方案1】:对于 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)
请参阅:Apple documentation 以获取可用名称(API 列)或转到 Interface Builder,选择 UIButton 并在 Attributes Inspector 中选择 Image,这将为您提供所有可用图标的列表。
【讨论】:
你需要设置@available属性来检查iOS版本。 不错的选项,因为我们有很多来自系统本身的选项。 为什么这对我不起作用?我的按钮最终是空的。我有一个条件,只有在 iOS 版本为 13+ 时才会尝试执行上述代码 @BrianReinhold 尝试使用名称“放大镜”【参考方案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
这是我们如何使用它的示例:
let button = UIButton() ;
let systemImage = UIImage(systemItem: .trash) ;
button.setImage(systemImage, for: .normal)
【讨论】:
【参考方案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:link
【讨论】:
【参考方案4】:现在你可以这样做了
button.setImage(UIImage(.search), for: .normal)
【讨论】:
我现在使用 Swift 4 和 IOS 9 或更高版本的编码【参考方案5】: 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()
【讨论】:
【参考方案6】:来自 Apple 的文档:init(type:)
【讨论】:
你看到你所指的类型列表了吗?它不包括所询问的任何图标。 它们是唯一可用的 UIButton 类型。 是的......所以不是这个特定问题的解决方案。以上是关于如何以编程方式为 UIButton 添加系统图标?的主要内容,如果未能解决你的问题,请参考以下文章
如何使用自动布局在 ios 中以编程方式在 UIview 上添加 UIbutton