Swift: добавить все кнопки в массив - PullRequest
0 голосов
/ 25 мая 2018

Я новичок в программировании Swift.

Я создал приложение с несколькими одинаковыми кнопками.Я создал одну кнопку с действием, а затем скопировал эту кнопку несколько раз, чтобы она использовала одно и то же действие.

Существует ли простой способ добавить все эти кнопки (их около 100) в массив, чтобыНапример, я могу изменить изображение кнопки для всех из них за один раз?

Поскольку кнопок так много, я бы не хотел добавлять их все по одному в розеткуколлекция.

Как уже упоминалось, я новичок, поэтому чем проще, тем лучше.

Редактировать Все экземпляры кнопки имеют тег«1», если это какая-либо помощь и была создана с помощью основной раскадровки.

Заранее спасибо, Томас

Ответы [ 4 ]

0 голосов
/ 25 мая 2018

Обновленный ответ:

Ваши кнопки находятся в пределах UIStackView с.Существует один verticalStackView, который содержит несколько horizontalStackView с (каждый с одной строкой UIButton с).

Создайте @IBOutlet для verticalStackView, а затем добавьте свои кнопки в класссвойство с именем allButtons со следующим кодом в viewDidLoad:

class ViewController: UIViewController {
    @IBOutlet weak var verticalStackView: UIStackView!

    var allButtons = [UIButton]()

    override func viewDidLoad() {
        super.viewDidLoad()

        for case let horizontalStackView as UIStackView in verticalStackView.arrangedSubviews {
            for case let button as UIButton in horizontalStackView.arrangedSubviews {
                allButtons.append(button)
            }
        }
    }
}

Оригинальный ответ:

Для создания массива всех UIButtons с tag == 1:

Используйте условное приведение as? UIButton вместе с compactMap, чтобы найти все кнопки в outerView.subviews, а затем filter, чтобы выбрать эти кнопки с помощью tag == 1:

class ViewController: UIViewController {
    @IBOutlet weak var outerView: UIView!

    var allButtons: [UIButton] = []

    override func viewDidLoad() {
        super.viewDidLoad()

        allButtons = outerView.subviews
                         .compactMap { $0 as? UIButton }
                         .filter { $0.tag == 1 }
    }

}

Примечание: outerView - это UIView, который содержит кнопки.Создайте @IBOutlet для этого представления, чтобы этот код работал.

0 голосов
/ 25 мая 2018
let arrayOfButtons: [UIButton]

    for i in 0....100 {
        let button  = UIButton()

        button.setImage(UIImage, forState: .normal)
        button.setTitle("test", for: .normal)
        button.addTarget(self, action: #selector(clickBackButton(_:)), for: .touchUpInside)

        arrayOfButtons.append(button)
    }

@IBAction func clickBackButton(_ sender: UIButton)
{
}

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

0 голосов
/ 25 мая 2018

1-й шаг : подключить все кнопки к одному IBAction в файле swift

2-й шаг : назначить всем кнопкам общий специальный тег, например 1010, 1007, ..etc

3-ий шаг : напишите приведенный ниже код в вашем IBAction

@IBAction func didPressBtn(_ sender: Any) {
    for btn in self.view.subviews{
       if btn.tag == 1010
       {
                let btnRefrence = btn as! UIButton
                btnRefrence.setImage(img, for:.normal)

        }
    }
}

Надеюсь, что эта помощь

0 голосов
/ 25 мая 2018

1- Сделать массив кнопок

let arrayOfButtons: [UIButton]

2- инициализировать его (дать ему значение) 3- затем использовать циклы для изменения значений, таких как установка изображения кнопки

for button in arrayOfButtons {
    button.setImage(UIImage, forState: UIControlState.Normal)
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...