Swift поместил несколько IBOutlets в массив
Я сделал эти (отмеченные красной рамкой) IBOutlets, используя ctrl + drag
Но я не люблю, чтобы одна и та же линия была 9 раз (СУХАЯ)
Как поместить эти IBOutlets в массив?
5 ответов
Вы можете определить общую коллекцию розеток в Swift следующим образом:
@IBOutlet var collectionOfViews: Array<UIView>? // = [UIView]?
или, например, UIButton
объекты:
@IBOutlet var collectionOfButtons: Array<UIButton>? // = [UIButton]?
вы можете найти свои коллекции в группе Outlet Collections, как это обычно бывает у владельца файла:
это будет выглядеть на моей консоли после подключения 5 случайных кнопок:
Выполните следующие шаги, чтобы создать массив выходов и связать его с 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(), чтобы помочь в работе с этой коллекцией. Сладкая правда?