ios - Swift 4 中的 UIButton 数组

标签 ios arrays swift button

我用 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)

    }

这是制作尽可能多的复选框所需的全部代码。但是,每个复选框都需要创建/移动一个按钮到 Storyboard 上的正确位置,将按钮从 Storyboard 链接到刚刚编码的按钮变量。这可能需要很长时间,因为每个 View Controller 需要 100 多个按钮。

有没有更快的方法通过制作按钮数组来做到这一点?或者类似的东西?

最佳答案

可以将 IBOutlet 声明为数组

  • 创建一个 IBOutlet 作为数组

    @IBOutlet var boxes : [UIButton]!
    
  • 将所有按钮连接到同一个 socket (按所需顺序)

  • viewDidAppear中使用循环或forEach

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

  • 创建一个 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
        }
    }
    

关于ios - Swift 4 中的 UIButton 数组,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50068413/

相关文章:

iOS:在应用程序处于后台时执行上传任务

Javascript 递归函数和 Lodash

swift - 如何从 firebase 下载多个图像?

ios - 在 Swift 中将文本添加到 TextView

ios - 如何为 API 凭据设置/取消设置多个帐户

ios - Firebase 使 iMessage 扩展崩溃

ios - iOS 中的日期和时间格式

android - 创建从 iOS (Swift) 到 Android(Kotlin) 的 Needle GaugeView

arrays - Hive 表数组列 - 使用 array_index 展开

arrays - 在 Postgres 中将列从 Integer[] (ARRAY) 更改为 Integer