ОБНОВЛЕНИЕ: я добавляю фотографию, которая может лучше продемонстрировать тип того, чего я пытаюсь достичь.
Я создаю приложение, в котором пользователь может установить столько потоков, сколько ему нравится, в потоке изображений. Я хотел бы отобразить каждый фильтр, который они установили, в виде кнопки с X, если они хотели бы удалить его. Я создал свои собственные кнопки и назначил им действия, но это будет мой первый проект с динамическими кнопками.
Моя путаница в том, как программно создать кнопку, назначить ей действие, которое знает, на какой фильтр воздействовать, а затем расположить его так, чтобы кнопки вели себя как текст в текстовом поле, чтобы, если кнопка не помещалась на на экране это «перенос слов» на следующую строку.
У меня есть массив фильтров, которые они применили, и я могу их зациклить, я просто не знаю, каков механизм их упорядочения, чтобы каждая кнопка действовала как собственное слово в предложении. В качестве обходного пути я мог бы использовать представление таблицы / коллекции, но так как ширина фильтров варьируется среди потенциальных кнопок, я действительно надеялся не устанавливать одинаковую ширину, как это требовалось бы. Я видел приложения, которые делают это, поэтому я надеюсь, что эксперты здесь могут помочь.
Я подозреваю, что решение выглядит примерно так:
- Для цикла, который имеет для каждого фильтра в фильтрах
- Создание и настройка кнопки UIB с текстовым заголовком фильтра
- Назначить действие, которое принимает аргумент, чтобы я знал, какой фильтр удалить
Назначьте ограничения соответствующим образом, чтобы он занимал всю ширину экрана, но «переносится по словам», если он не помещается, и любой объект контейнера, в котором он находится, увеличивается по высоте, который необходимо будет отрегулировать в ландшафтном режиме
// Может ли #selector принимать аргумент, например, расположение массива фильтра?
myButton.addTarget (self, action: #selector (helloButton), forControlEvents: .TouchUpInside)