Массив UIB-кнопок в Свифт 4 - PullRequest
0 голосов
/ 27 апреля 2018

Я сделал ряд флажков в UiKit с помощью кнопок UIB:

@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)

    }

Это весь код, необходимый для установки максимально возможного количества флажков. Однако каждый флажок требует создания / перемещения кнопки в нужное место на раскадровке, связывая кнопку от раскадровки с только что закодированной переменной кнопки. Это может занять много времени, так как мне нужно более 100 кнопок на контроллер представления.

Есть ли более быстрый способ сделать это, создав массив кнопок? или что-то подобное?

1 Ответ

0 голосов
/ 27 апреля 2018

Можно объявить IBOutlet как массив

  • Создать IBOutlet как массив

    @IBOutlet var boxes : [UIButton]!
    
  • Подключите все кнопки к одной розетке (в нужном порядке)

  • В 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
        }
    }
    
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...