Swift поместил несколько IBOutlets в массив

Несколько IBOutlets

Я сделал эти (отмеченные красной рамкой) IBOutlets, используя ctrl + drag

Но я не люблю, чтобы одна и та же линия была 9 раз (СУХАЯ)

Как поместить эти IBOutlets в массив?

5 ответов

Вы можете определить общую коллекцию розеток в Swift следующим образом:

@IBOutlet var collectionOfViews: Array<UIView>? // = [UIView]?

или, например, UIButton объекты:

@IBOutlet var collectionOfButtons: Array<UIButton>? // = [UIButton]?

вы можете найти свои коллекции в группе Outlet Collections, как это обычно бывает у владельца файла:

Аутлет Коллекции

это будет выглядеть на моей консоли после подключения 5 случайных кнопок:

Подключенные экземпляры UIButton к Коллекции

Выполните следующие шаги, чтобы создать массив выходов и связать его с IB Elements:

  • Создать массив IBOutlets
  • Добавьте несколько UIElements (Views) в интерфейс Storyboard ViewController
  • Выберите ViewController (в раскадровке) и откройте инспектор соединений
  • В инспекторе соединений есть опция "Коллекции розеток" (там вы увидите массив розеток)
  • Подключите, если с вашими элементами интерфейса

-

class ViewController2: UIViewController {


    @IBOutlet var collection:[UIView]!


    override func viewDidLoad() {
        super.viewDidLoad()
    }
}

Решение здесь Swift - эквивалент IBOutletCollection

@IBOutlet var objectCollection: [Object]

Это для macOS (должно быть аналогично для iOS), и я не нахожу «Коллекции розеток» в моей раскадровке (похоже, они отказались от этой опции). Поэтому я вставил все свои кнопки в NSStackView и связал стек из раскадровки

      @IBOutlet weak var buttons: NSStackView!

а затем я перебрал их, чтобы внести соответствующие изменения

      for case let (index, button as NSButton) in buttons.arrangedSubviews.enumerated() {
            if(index + 1 != someButtonIndex) {button.state = .off}
            else {button.state = .on}
        }

вы также можете использовать tag вместо index

Начните с двух областей просмотра, где вы видите и свой код, и раскадровку. Когда вы делаете свое первое соединение IBOutlet из пользовательского интерфейса с вашим кодом, просто внимательно посмотрите в раскрывающемся поле "Соединение" и выберите опцию "Сбор розеток". Это автоматически создаст массив IBOutlets. Затем просто найдите маленький черный круг внутри круга, который помещен в ваш код, где создается массив. Просто перетащите из этого круга на все другие объекты пользовательского интерфейса, которые вы хотите подключить к той же коллекции (не уверен, что вы можете смешивать типы). Точно так же вы можете подключить все объекты к одному действию, перетаскивая первую созданную черную точку на все другие объекты, которые вы хотите подключить к этому действию. Также рассмотрите EnumerateSequence(), чтобы помочь в работе с этой коллекцией. Сладкая правда?

Другие вопросы по тегам