Ios Swift 3-以编程方式构建带有图像和标签的按钮

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

我目前正在尝试用5个按钮(以编程方式)构建一个界面,其中包含一个图像和一个标签

我已经使用UIStackView(握住UIButton和UIlabel)成功地完成了一个按钮

我有两个问题要问这个论坛

  • 可以构建一个UIButton来显示标题或图像,它可以同时显示标题和图像吗
  • “for in”循环能否用于生成5个单独的按钮?i、 e:一种重复使用代码而不是为5个按钮、5个标签和5个堆栈视图键入代码的方法
  • 我的工作视图按钮代码如下:

        // 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
    
  • 当然,UIButton可以同时具有图像和/或文本。您可以使用:

    button.setImage(image: UIImage?, for: UIControlState)
    button.setTitle(title: String?, for: UIControlState)
    
  • 创建一个返回UIButton的函数,并执行以下操作:

    let button = generateButton()
    stackView.addArrangedSubview(button)
    
  • 当然,UIButton可以同时具有图像和/或文本。您可以使用:

    button.setImage(image: UIImage?, for: UIControlState)
    button.setTitle(title: String?, for: UIControlState)
    
  • 创建一个返回UIButton的函数,并执行以下操作:

    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循环一旦我修复我的按钮。谢谢你,迈克尔,没问题,如果这有帮助的话,别忘了接受我的回答;)祝你好运