Индексы или теги? Для нескольких флажков в качестве кнопок в IBOutletCollection - PullRequest
0 голосов
/ 30 апреля 2018

Я новичок в Swift, но кто-то упомянул, что я должен использовать индексы или теги для кнопок в IBOutletCollection.

Я не уверен, как индексировать или маркировать определенные кнопки, а затем ссылаться на них в случаях:

// images of checked and unchecked boxes for the button to switch between
var BoxON = UIImage(named: "CheckBox")
var BoxOFF = UIImage(named:"UnCheckBox")

override func viewDidAppear(_ animated: Bool) {
    super.viewDidAppear(animated)

    boxes.forEach {
        $0.setImage(BoxOFF, for: .normal)
        $0.setImage(BoxON, for: .selected)
    }

}

@IBOutlet var boxes : [UIButton]!

@IBAction func boxTouched(_ sender: UIButton) {
    sender.isSelected = !sender.isSelected
    let index = boxes.index(of: sender)!
    switch index {

        case 0:
            sender.isSelected = !sender.isSelected
        case 1:
            sender.isSelected = !sender.isSelected
        case 2:
            sender.isSelected = !sender.isSelected
        case 3:
            sender.isSelected = !sender.isSelected
        case 4:
            sender.isSelected = !sender.isSelected
        default:
            sender.isSelected = !sender.isSelected

    }
}

Заранее спасибо! :)

EDIT: Убрал переключатель и заменил его оператором if (It Works!)

  @IBAction func boxTouched(_ sender: UIButton) {
    sender.isSelected = !sender.isSelected

    if sender.isSelected{

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

    }

Ответы [ 2 ]

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

На раскадровке вы можете установить тег для каждой кнопки в инспекторе атрибутов. In image you can see the selected button and tag property for it in Attributes inspector Ниже приведен измененный код:

@IBAction func boxTouched(_ sender: UIButton) {
sender.isSelected = !sender.isSelected
let buttonTag = sender.tag
switch tag {

    case 0:
        //code you want to write for case 0
    case 1:
        //code you want to write for case 1
    case 2:
        //code you want to write for case 2
    case 3:
        //code you want to write for case 3
    case 4:
        //code you want to write for case 4
    default:
        //code you want to write for default case

}

}

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

Вы нажимаете на каждую кнопку в раскадровке, а затем устанавливаете тег в инспекторе атрибутов. Это то, что вы должны сделать, потому что IBOutletCollections не гарантирует сохранение порядка.

enter image description here

Тогда в вашем коде вы просто получаете доступ к тегу так: sender.tag

@IBAction func clickedButton(_ sender: UIButton) {

    switch sender.tag {
    case 0:
        print("this is button 0")
    case 1:
        print("this is button 1")
    case 2:
        print("this is button 2")
    default:
        print("unknown button")
    }
}

Это работает для меня после ctrl + перетаскивания каждой кнопки в метод.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...