Как сделать IBOutlets из массива объектов? - PullRequest
31 голосов
/ 05 декабря 2010

Я хочу создать массив с кучей UIImageViews, которые есть в Интерфейсном Разработчике. Вместо 20 или 30

IBOutlet UIImageView *img1;

и связывая их таким образом, а затем помещая их в массив, есть ли способ объявить массив IBOutlet UIImageViews?

Просто у меня не так много объявлений в заголовочном файле.

Ответы [ 5 ]

43 голосов
/ 12 января 2011

Возможно, это называется коллекция розеток . Это способ определить коллекцию торговых точек:

@property(retain) IBOutletCollection(UIImageView) NSArray *images;

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

4 голосов
/ 14 января 2011

Я немного опоздал, но может быть проще установить свойство тега для каждого ImageView в IB, а затем обращаться к ним как [some_superview viewWithTag:tag], а не хранить отдельный дескриптор для каждого.

2 голосов
/ 22 февраля 2017

Swift 3 и выше:

@IBOutlet var stuckLabels: [UIImageView]
1 голос
/ 03 ноября 2017

Вот более простой способ сделать это.

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

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

-

class ViewController2: UIViewController {


    @IBOutlet var collection:[UIView]!


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

enter image description here

0 голосов
/ 05 декабря 2010

К сожалению, нет, но вы можете хранить все объявления в одной строке:

IBOutlet UIImageView *img1, *img2, *img3, *img4;

Другой вариант (вероятно, лучший, поскольку у вас их так много) будет создавать их программно и сохранять их в массиве, а затем добавлять их в представление из класса контроллера представления, используя для каждого

[self.view addSubview:img];

Кроме того, имейте в виду, что если элементы являются статическими (например, фоновые элементы), и вам на самом деле не требуется доступ к ним, вам не нужно объявлять торговые точки для каждого; Вы можете просто добавить их в файл пера и забыть о них.

То же самое относится к UIButton экземплярам. Если вам не нужно ничего менять в кнопке, вы можете получить к ней доступ из метода, который она вызывает, например:

-(IBAction) buttonPressed:(id)sender {
    UIButton *button = (UIButton *)sender;
    // method guts
    // stuff with button -- access tag, disable, etc
}
...