Динамическое создание простых UI элементов во View

swift
xcode

#1

Добрый день!
Находил похожие темы на форуме при работе с Table и Collection View. Но не могу их переложить на свой вопрос. Описание ниже.

*Все делается без storyboard
Есть простая кнопка UIButton.

  1. По клику на неё по центру экрана создается UITextView
  2. Вводится текст, тапается мимо UITextView
  3. UITextView перетаскивается в верхний угол экрана (например)
  4. Первая итерация закончена (Тут все работает и вопросов не вызывает)
    Начинается вторая итерация.
    Снова клик по UIButton. Надо создавать новый UITextView . Вот тут и возникает вопрос - Как программно инициализировать новый элемент UITextView? Точнее - как динамически создать вторую переменную для инициализации
    Попытки поставить счетчик и добавить его в имя переменой при каждом клике на кнопку, закономерно не дали результата.
    В голове крутится - используй массив, но так как я только-только начинаю изучать swift, дальше мысль не идет.
    Буду признателен за пример реализации или совет.

Спасибо,
С уважением,
Алексей


#2

А при чем тут массив, если у вас итереция по кнопке происходит


#3

Это не очень красиво, но я точно знаю, что будет не более 25 итераций (дальше кнопку делаю неактивной). Создать массив заранее, и брать по счетчику след запись при каждом нажатии. Но ответа на вопрос, как String из массива сделать именем переменной у меня тоже нет. Да и само решение не нравится.


#4

Я если честно не понял смысла всего этого, но динамически вью можно создать в цикле:

for _ in 0...25 {
    let v = UIView(frame: .zero)
    v.backgroundColor = .green
    view.addSubview(v)
}

Могут быть ошибки в написании, я по памяти без икскод писал сейчас сей текст.


#5

Вот пример создания вьюх в стеке:

let stack = UIStackView()
stack.translatesAutoresizingMaskIntoConstraints = false
stack.axis = .vertical
stack.alignment = .fill
stack.distribution = .fillProportionally

view.addSubview(stackView)
stackView.leadingAnchor.constraint(equalTo: view.leadingAnchor, constant: 30).isActive = true
stackView.topAnchor.constraint(equalTo: view.topAnchor, constant: 20).isActive = true
stackView.bottomAnchor.constraint(equalTo: view.bottomAnchor, constant: -40).isActive = true
stackView.widthAnchor.constraint(equalToConstant: 50).isActive = true

После тупо заполняем стек:

for _ in 0...10 {
      let dotView = UIView(frame: .zero)
      dotView.backgroundColor = .clear
      stackView.addArrangedSubview(dotView)
}