首页 > 解决方案 > 我想为每个 ViewController 设置不同的自定义堆叠按钮类的按钮文本

问题描述

stackButtonView像这样设置自定义。我想使用这个类来改变 buttonText 上下文的另一个类。

["1","2","3","4"] >> ["a","b","c","d"]

我认为 buttonText 设置为 global property 。我对吗?..

类种类按钮视图:UIView{

 //...
let buttonText: [String] = [
                  "1","2","3","4"
            ]
public func addButtonsToStackView() {
        
         
    let numberOfButtons = buttonText.count
    
    let column = 2
    let row: Int
    
    if numberOfButtons % column != 0 {
        row = (numberOfButtons / column) + 1
    } else {
        row = numberOfButtons / column
    }
    
    for i in 0 ..< row {
        
        let horizontalSv = UIStackView()
        horizontalSv.axis = .horizontal
        //horizontalSv.alignment = .fill

        horizontalSv.distribution = .fillEqually
        horizontalSv.spacing = 8
        
        for j in 0 ..< column {
            if buttonText.count  == i*column + j {
                let hideButton = SurveyButton()
                // make tranparant !
                hideButton.layer.shadowColor = UIColor(red: 0, green: 0, blue: 0, alpha: 0).cgColor
                hideButton.layer.shadowOffset = CGSize(width: 0, height: 0)
                hideButton.layer.shadowOpacity = 0
                hideButton.layer.shadowRadius = 0
                hideButton.layer.masksToBounds = false
                hideButton.layer.shadowOffset = CGSize(width: 0, height: 0)
                horizontalSv.addArrangedSubview(hideButton)
                break
            }
            let button = SurveyButton()
            button.setTitle("\(buttonText[ i*column + j  ])",for: .normal)
            button.titleLabel?.font = UIFont(name: "AvenirNext-DemiBoldItalic", size: 15)
            button.tag = i*column + j + 1
            button.addTarget(self, action: #selector(handleCleaningKinds(_:)), for: .touchUpInside)
            horizontalSv.addArrangedSubview(button)
        }
      
    
        stackView1.addArrangedSubview(horizontalSv)
    }
    stackView.addArrangedSubview(stackView1)
}

标签: swift

解决方案


是的,你的方法大多会奏效。

如果您希望我提出一些更改建议,那么:

  1. 放置addButtonsToStackView()在适当的扩展类中(在您的情况下UIView)。
  2. 在您将使用buttonText它的类中用作私有属性。
  3. buttonText最好将正确addButtonsToStackView()地作为参数传递。

推荐阅读