Ios Swift 3-以编程方式构建带有图像和标签的按钮
我目前正在尝试用5个按钮(以编程方式)构建一个界面,其中包含一个图像和一个标签 我已经使用UIStackView(握住UIButton和UIlabel)成功地完成了一个按钮 我有两个问题要问这个论坛Ios Swift 3-以编程方式构建带有图像和标签的按钮,ios,swift3,uibutton,uistackview,Ios,Swift3,Uibutton,Uistackview,我目前正在尝试用5个按钮(以编程方式)构建一个界面,其中包含一个图像和一个标签 我已经使用UIStackView(握住UIButton和UIlabel)成功地完成了一个按钮 我有两个问题要问这个论坛 可以构建一个UIButton来显示标题或图像,它可以同时显示标题和图像吗 “for in”循环能否用于生成5个单独的按钮?i、 e:一种重复使用代码而不是为5个按钮、5个标签和5个堆栈视图键入代码的方法 我的工作视图按钮代码如下: // Button let btnSettings
// Button
let btnSettings = UIButton()
// btnSettings.setTitle("Settings", for: .normal)
btnSettings.setImage(#imageLiteral(resourceName: "star-in-circle"), for: .normal)
btnSettings.heightAnchor.constraint(equalToConstant: 100.0).isActive = true
btnSettings.widthAnchor.constraint(equalToConstant: 100.0).isActive = true
btnSettings.contentMode = .scaleAspectFit
btnSettings.addTarget(self, action: #selector(openSettings), for: .touchUpInside)
btnSettings.translatesAutoresizingMaskIntoConstraints = false
// Text Label
let textLabel = UILabel()
textLabel.backgroundColor = UIColor.clear
textLabel.widthAnchor.constraint(equalToConstant: 100.0).isActive = true
textLabel.heightAnchor.constraint(equalToConstant: 20.0).isActive = true
textLabel.font = UIFont.boldSystemFont(ofSize: 18)
textLabel.text = "Settings"
textLabel.textAlignment = .center
// Stack View
let stackView = UIStackView()
stackView.axis = UILayoutConstraintAxis.vertical
stackView.distribution = UIStackViewDistribution.equalSpacing
stackView.alignment = UIStackViewAlignment.center
stackView.spacing = 1.0
stackView.addArrangedSubview(btnSettings)
stackView.addArrangedSubview(textLabel)
stackView.translatesAutoresizingMaskIntoConstraints = false
self.view.addSubview(stackView)
// Constraints
stackView.centerXAnchor.constraint(equalTo: self.view.centerXAnchor).isActive = true
stackView.centerYAnchor.constraint(equalTo: self.view.centerYAnchor).isActive = true
更新/解决问题1
我需要使用button.setBackgroundImage()以使按钮标题与图像一起显示
btnSettings.setBackgroundImage(#imageLiteral(resourceName: "star-in-circle"), for: .normal)
btnSettings.setTitle("Button Title", for: .normal)
btnSettings.backgroundColor = UIColor.white
button.setImage(image: UIImage?, for: UIControlState)
button.setTitle(title: String?, for: UIControlState)
let button = generateButton()
stackView.addArrangedSubview(button)
button.setImage(image: UIImage?, for: UIControlState)
button.setTitle(title: String?, for: UIControlState)
let button = generateButton()
stackView.addArrangedSubview(button)
第一个问题的答案是一个UIButton可以有标题和标签,第二个答案是的,您可以在Loop的帮助下制作按钮,但对于操作,您必须为每个UIButton添加标签。@GurinderBatth感谢您的回答。有什么有用的建议吗?我尝试将button.setTitle()和button.setImage()添加到代码中,但它只显示图像,不是图像和标题都有。第一个问题的答案是UIButton可以有标题和标签,第二个答案是的,您可以在Loop的帮助下制作按钮,但对于操作,您必须给每个UIButton添加标签。@GurinderBatth感谢您的回答。有什么有用的建议吗?我已尝试将button.setTitle()和button.setImage()添加到我的代码中,但它只显示图像,而不同时显示图像和标题。感谢Michal,添加您在回答我的问题#1时提到的两行会忽略标题。ie:它只显示图像。我改变了按钮背景的背景颜色,以防标题被隐藏。图像有背景和前景的顺序吗?图像是位于文本前面还是文本位于图像前面?我希望在哪里看到与按钮图像相关的按钮标题?标题应该显示在图像的右侧,并且应该在背景上方。好的,谢谢。我的按钮和文本标签都在StackView中,这可能会妨碍按钮标题的显示。我将使用堆栈外的基本元素进行更多测试。我会尝试你的第二个答案,我的for-in循环一旦我修复我的按钮。谢谢你,迈克尔,没问题,如果这有帮助的话,别忘了接受我的回答;)祝你好运。谢谢Michal,在回答我的问题1时添加了你提到的两行,忽略了标题。ie:它只显示图像。我改变了按钮背景的背景颜色,以防标题被隐藏。图像有背景和前景的顺序吗?图像是位于文本前面还是文本位于图像前面?我希望在哪里看到与按钮图像相关的按钮标题?标题应该显示在图像的右侧,并且应该在背景上方。好的,谢谢。我的按钮和文本标签都在StackView中,这可能会妨碍按钮标题的显示。我将使用堆栈外的基本元素进行更多测试。我会尝试你的第二个答案,我的for-in循环一旦我修复我的按钮。谢谢你,迈克尔,没问题,如果这有帮助的话,别忘了接受我的回答;)祝你好运