Подтвердить что ты не робот

Как сделать IBOutlets из массива объектов?

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

IBOutlet UIImageView *img1;

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

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

4b9b3361

Ответ 1

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

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

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

Ответ 2

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

Ответ 3

Swift 3 и выше:

@IBOutlet var stuckLabels: [UIImageView]

Ответ 4

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

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

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

-

class ViewController2: UIViewController {


    @IBOutlet var collection:[UIView]!


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

enter image description here

Ответ 5

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

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

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

[self.view addSubview:img];

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

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

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