2016-03-03 5 views
0

Есть ли способ создать представление в цикле for, к которому обращается его идентификатор тега? Если нет, то есть лучший способ достичь ниже? Я предполагаю, что, поскольку я переписываю var 'myView', он всегда будет последним значением цикла for. Но есть ли способ достичь чего-то подобного ниже? [Swift]Доступ к динамически созданному представлению по его идентификатору тега

var myView = UIView(); 

// Create a for loop of 20 Views on different x/y axis 
var myView = UIView(); 
var leftPos : CGFloat = 0; 
for (var i = 0; i < 20; i++){ 
    myView.backgroundColor = UIColor.clearColor() 
    myView.tag = i; 
    myView.frame = CGRect(x: leftPos, y: 0, width: 20, height: 20) 
    mySuperView.addSubview(myView) 
    leftPos += 20; 
} 
// Then later on reference it by its tag id: 
myView.tag[13].backgroundColor = UIColor.redColor() 

ответ

2

Вы можете найти вид с определенным тегом, используя viewWithTag функцию:

view = mySuperView.viewWithTag(13) 

Обратите внимание, что используя тег 0 «плохо», так что нет значение тега по умолчанию, если нет используется другое значение.

+0

Ahhhh so simple Я знал, что это было что-то легкое. Большое спасибо Дэвиду! – user3612986

+1

Я рад, что вы упомянули значение тега по умолчанию. :) – Abizern

3

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

// Declare a variable to hold on to your subviews 
var views = [UIView]() 

// Create 20 views, add them as subviews and add them to the views array 
for i in 0..<20 { 
    let leftPos = CGFloat(i) * 20 

    let view = UIView(frame: CGRect(x: leftPos, y: 0, width: 20, height: 20)) 
    mySuperView.addSubview(view) 
    views.append(view) 
} 

// Access the view by it's index - no need for a tag. 
views[13].backgroundColor = .redColor() 
+0

Это отличная идея! Спасибо Абизерн! – user3612986

+0

Это, вероятно, лучший подход. Я просто отвечал на заданный вопрос :) –

+0

Вы спасли мою борьбу с autoLayout и scrollView, спасибо. –

Смежные вопросы