Мне нужно создать 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 текстовых представления и иметь возможность контролировать его?
Если вам необходимо получить доступ сгенерированного вида текста из других методов в классе или даже после того, как отправили for
цикла, то вам нужно оставить ссылки на них.
Создайте массив для хранения каждого из них. Затем вы можете получить доступ позже, используя массив. Если вам нужно только это в методе, который их создает, тогда создайте массив как другую локальную переменную. Если вам нужно получить доступ к текстовому представлению из других мест вашего класса, сделайте массив подходящим для своего класса (контроллер просмотра).
var textViews = [UITextView]()
И затем в вашем цикле добавьте:
textViews.append(textView)
Позже, когда вам нужно получить доступ к текстовым представлениям, вы можете перебирать массив или обращаться к отдельным элементам по мере необходимости.
Как и @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)
}
}
}
Простым решением будет присвоение тега каждому из 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)
...
Надеюсь, поможет!