Можно ли использовать что-то вроде массива IBOutlet?

У меня есть представление верхнего списка в моем текущем приложении для iPhone, которое заполнено кодом. Я собрал представление с помощью Interface Builder, поэтому оно содержит много UILabel.

Очевидно, я не хотел бы иметь name1, name2 и т. д. выходов в своем классе, но предпочел бы массив name[10].

Можно ли сделать это и связать каждый элемент с соответствующей меткой (или любым другим конструктором интерфейса, например представлением)?


person shinjin    schedule 17.12.2009    source источник


Ответы (4)


вы не можете сделать это в IB, но вы можете создать массив в своем методе init и добавить в него все свои метки.

Кстати, вы можете установить тег для каждой метки и определить макрос для доступа к нему. что-то вроде

#define NAME[TAG] (UILabel*)[self.view viewWithTag:TAG]
person Morion    schedule 17.12.2009

Вы, конечно, можете сделать это с помощью конструктора интерфейсов, ключевое слово IBOutletCollection. То, что он делает, - это в основном NSArray из нескольких выходов построителя интерфейса.

IBOutletCollection(UILabel) NSArray *myLabels;

Итак, следующим шагом будет подключение ваших меток в конструкторе интерфейсов, а затем вы сможете использовать массив для доступа ко всем меткам во время выполнения.

person JustSid    schedule 12.01.2011
comment
Должно быть, это новая функция Interface Builder и Xcode, не так ли? - person shinjin; 13.01.2011
comment
@Shinjin: я не могу назвать вам точную дату или выпуск, когда эта функция стала доступна, но я знаю, что она существует уже немного дольше (по крайней мере, год назад). - person JustSid; 13.01.2011
comment
Я где-то читал, что это было добавлено в iOS 4. Однако вы не можете полагаться на порядок IBOutlets (или не можете; не уверен, исправлено ли это в iOS 8 или нет). - person ultrageek; 20.04.2015

Выполните следующие действия, чтобы создать массив розеток и соединить его с IB Elements (вот пример UIView, вы также можете использовать UILabel):

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

-

class ViewController2: UIViewController {


    @IBOutlet var collection:[UIView]!


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

введите здесь описание изображения

person Krunal    schedule 26.10.2017

Это можно сделать с помощью коллекций выходов, см. этот связанный вопрос.

person zoul    schedule 12.01.2011