Можно ли использовать что-то вроде массива IBOutlet?
-
20-09-2019 - |
Вопрос
У меня есть верхний список в моем текущем приложении для iPhone, который заполнен кодом.Я собрал представление с помощью Interface Builder, поэтому оно содержит множество UILabel
s.
Очевидно, что я не хотел бы иметь name1
, name2
, и т.д.розетки в моем классе, но предпочитаю name[10]
массив.
Возможно ли это сделать и подключить каждый элемент к соответствующей метке (или любому другому конструктору интерфейса, такому как view)?
Решение
вы не можете сделать это в IB, но вы можете создать массив в вашем init
метод и добавьте к нему все ваши ярлыки.
Кстати, вы можете установить некоторый тег для каждой метки и определить макрос для доступа к ней.что-то вроде
#define NAME[TAG] (UILabel*)[self.view viewWithTag:TAG]
Другие советы
Конечно, вы можете сделать это с помощью interface builder, ключевое слово IBOutletCollection
.То, что он делает, - это, по сути, NSArray из нескольких выходов interface builder.
IBOutletCollection(UILabel) NSArray *myLabels;
Итак, следующим шагом будет подключение ваших меток в interface builder, а затем вы сможете использовать массив для доступа ко всем меткам во время выполнения.
Это можно сделать с помощью коллекций аутлетов, см. этот связанный с этим вопрос.
Выполните следующие действия, чтобы создать массив розеток и соединить его с элементами IB (вот пример UIView
, вы можете использовать UILabel
также):
- Создайте массив IBOutlets
- Добавьте несколько UIElements (представлений) в ваш интерфейс Storyboard ViewController
- Выберите ViewController (в раскадровке) и откройте инспектор подключений
- В инспекторе подключений есть опция "Коллекции розеток" (там вы увидите множество розеток).
- Соедините if с элементами вашего интерфейса
-
class ViewController2: UIViewController {
@IBOutlet var collection:[UIView]!
override func viewDidLoad() {
super.viewDidLoad()
}
}