Создайте 3 UITextView программно

-3

Мне нужно создать 3 UTextView программно, без необходимости устанавливать каждый из них в переменную, используя for цикла.

Вот демонстрация:

for i in 1...3 {
    var textView = UITextView()
    self.automaticallyAdjustsScrollViewInsets = false

    textView.center = self.view.center
    textView.textAlignment = NSTextAlignment.justified
    textView.textColor = UIColor.blue
    textView.backgroundColor = UIColor.lightGray

    self.view.addSubview(textView)
}

Как я могу сделать это, чтобы сделать 3 текстовых представления и иметь возможность контролировать его?

  • 1
    Вам нужно установить рамку textView, чтобы он имел размер.
  • 0
    Что вы подразумеваете под «иметь возможность контролировать это» ?
Показать ещё 4 комментария
Теги:
uitextview

3 ответа

1

Если вам необходимо получить доступ сгенерированного вида текста из других методов в классе или даже после того, как отправили for цикла, то вам нужно оставить ссылки на них.

Создайте массив для хранения каждого из них. Затем вы можете получить доступ позже, используя массив. Если вам нужно только это в методе, который их создает, тогда создайте массив как другую локальную переменную. Если вам нужно получить доступ к текстовому представлению из других мест вашего класса, сделайте массив подходящим для своего класса (контроллер просмотра).

var textViews = [UITextView]()

И затем в вашем цикле добавьте:

textViews.append(textView)

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

  • 0
    Спасибо, что то, что искал
0

Как и @rmaddy, вам нужно будет сохранить эти текстовые элементы в массиве. Вам также нужно будет добавить ограничения на текстовые элементы, чтобы помочь им играть хорошо с автозапуском

class MyViewController : UIViewController {
    var textViews = [UITextView]()

    func createUI() -> Void {
        for i in 1...3 {
            var textView = UITextView()
            self.automaticallyAdjustsScrollViewInsets = false

            textView.center = self.view.center
            textView.textAlignment = NSTextAlignment.justified
            textView.textColor = UIColor.blue
            textView.backgroundColor = UIColor.lightGray

            self.view.addSubview(textView)

            var vertContraint : NSLayoutConstraint
            if (i == 1) {
                vertContraint = NSLayoutConstraint(item: textView, attribute: .top, relatedBy: .equal, toItem: self.topLayoutGuide, attribute: .bottom, multiplier: 1.0, constant: 0.0)
            } else {
                vertContraint = NSLayoutConstraint(item: textView, attribute: .top, relatedBy: .equal, toItem: textViews[i - 1], attribute: .bottom, multiplier: 1.0, constant: 8.0)
            }
            //Do the same for your leading, trailing edges
            textView.addConstraints([/*vertContraint, leadingContr, trailingContr*/])
            textViews.append(textView)   
        }             
    }
}
0

Простым решением будет присвоение тега каждому из UITextView а затем доступ к нему с помощью назначенного тега, соответственно.

Вот демонстрация присвоения меток:

for i in 1...5 {
    var textView = UITextView()
    self.automaticallyAdjustsScrollViewInsets = false

    textView.center = self.view.center
    textView.textAlignment = NSTextAlignment.justified
    textView.textColor = UIColor.blue
    textView.backgroundColor = UIColor.lightGray
    textView.tag = i
    self.view.addSubview(textView)
}

И вы можете получить доступ к любому назначенному UITextView():

self.view.viewWithTag(1)
self.view.viewWithTag(2)
...

Надеюсь, поможет!

  • 0
    Спасибо, вот что я искал.

Ещё вопросы

Сообщество Overcoder
Наверх
Меню