Как сделать IBOutlets из массива объектов?
Я хочу создать массив с кучей UIImageViews, который у меня есть в Interface Builder. Вместо того, чтобы иметь 20 или 30
IBOutlet UIImageView *img1;
и связывая их все таким образом, а затем помещая их в массив, есть ли способ объявить массив IBOutlet UIImageViews?
Просто так, что в моем заголовочном файле не так много объявлений.
Ответы
Ответ 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
}