Swift 4中的UIButton数组

Dan*_*l G 1 arrays button ios swift

我已经使用UIButtons在UiKit中制作了一系列复选框:

@IBOutlet weak var Box1: UIButton!
@IBOutlet weak var Box2: UIButton!
@IBOutlet weak var Box3: UIButton!
....
@IBOutlet weak var Box59: UIButton!




// Gives the button an action
@IBAction func Box1(_ sender: UIButton) {
    sender.isSelected = !sender.isSelected
}
@IBAction func Box2(_ sender: UIButton) {
    sender.isSelected = !sender.isSelected
}
@IBAction func Box3(_ sender: UIButton) {
    sender.isSelected = !sender.isSelected
}
    ....
@IBAction func Box59(_ sender: UIButton) {
    sender.isSelected = !sender.isSelected
}




// Creates button images of checkbox and unchecked box
var BoxON = UIImage(named: "CheckBox")
var BoxOFF = UIImage(named:"UnCheckBox")




// Allows the button to be set to the image, if selected or not 
override func viewDidAppear(_ animated: Bool) {
    super.viewDidAppear(animated)

    Box1.setImage(BoxOFF, for: .normal)
    Box1.setImage(BoxON, for: .selected)

    Box2.setImage(BoxOFF, for: .normal)
    Box2.setImage(BoxON, for: .selected)

    Box3.setImage(BoxOFF, for: .normal)
    Box3.setImage(BoxON, for: .selected)
    ....
    Box59.setImage(BoxOFF, for: .normal)
    Box59.setImage(BoxON, for: .selected)

    }
Run Code Online (Sandbox Code Playgroud)

这是制作尽可能多的复选框所必需的所有代码。但是,每个复选框都需要在故事板上的正确位置创建/移动按钮,并将按钮从故事板上链接到刚刚编码的按钮变量。这可能会花费很多时间,因为每个视图控制器需要100多个按钮。

是否有通过制作按钮数组来实现此目的的更快方法?或类似的东西?

vad*_*ian 5

可以声明一个IBOutletas数组

  • 创建一个IBOutletas数组

    @IBOutlet var boxes : [UIButton]!
    
    Run Code Online (Sandbox Code Playgroud)
  • 将所有按钮连接到同一插座(按所需顺序)

  • viewDidAppear使用循环或forEach

    override func viewDidAppear(_ animated: Bool) {
        super.viewDidAppear(animated)
    
        boxes.forEach {
            $0.setImage(BoxOFF, for: .normal)
            $0.setImage(BoxON, for: .selected)
        }
    }
    
    Run Code Online (Sandbox Code Playgroud)
  • 向按钮添加唯一标签(可选)。

  • 创建一个IBAction并将所有按钮连接到动作
  • 使用switch语句通过数组中的索引或标签来区分按钮

    @IBAction func boxTouched(_ sender: UIButton) {
        sender.isSelected = !sender.isSelected
        let index = boxes.index(of: sender)!
        switch index {
           // handle the cases
        }
    }
    
    @IBAction func boxTouched(_ sender: UIButton) {
        sender.isSelected = !sender.isSelected
        switch sender.tag {
           // handle the cases
        }
    }
    
    Run Code Online (Sandbox Code Playgroud)

  • @BadhanGanesh永生而繁荣 (2认同)