Могу ли я подключить несколько объектов с разными тегами к одному и тому же IBOutlet? - PullRequest
7 голосов
/ 19 декабря 2011

У меня 30 кнопок в одном представлении в Интерфейсном Разработчике. Каждый из них имеет разные теги между 100001 и 100030. Мне было легко использовать одно и то же действие для каждой кнопки, передавая тег для каждой из них при нажатии и используя код, чтобы решить, какой уровень загрузить.

Я хочу подключить все кнопки к одному IBOutlet, но каждая кнопка должна загружать свое изображение на основе сохраненных данных пользователя и тега кнопки.

Как мне это сделать?

Ответы [ 2 ]

24 голосов
/ 19 декабря 2011

Используйте IBOutletCollection, чтобы добавить коллекцию розеток в свой контроллер вида, например:

@property (retain, nonatomic) IBOutletCollection(UIButton) NSMutableSet* buttons;

Это позволит вам подключить все ваши кнопки к одной розетке.Свойство buttons будет NSMutableSet, содержащим все ваши кнопки.Вы можете продолжать идентифицировать отдельные кнопки, используя свойство кнопки tag.Это удобно, если вы хотите выполнить итерацию по всем вашим кнопкам, возможно, для настройки изображения каждой кнопки:

for (UIButton *b in self.buttons) {
    b.imageView.image = [self imageForTag:b.tag];
}

(вам нужно будет предоставить метод -imageForTag:, чтобы обеспечить правильное изображение для данногопометить тегами или найти другой способ сопоставления тегов и изображений.)

Конечно, если вы уже знаете диапазон значений тегов для всех своих кнопок и позаботились о том, чтобы сделать теги уникальными.внутри представления, содержащего все кнопки, вы также можете просто извлечь каждую кнопку по отдельности, используя -viewWithTag:.Вероятно, это не так быстро, как создание всего набора кнопок, как у описанной выше коллекции розеток, но это означает, что есть еще одна вещь, которую нужно поддерживать.

1 голос
/ 18 октября 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

...