Swift 通过标记id访问动态创建的视图

Swift 通过标记id访问动态创建的视图,swift,uiview,Swift,Uiview,有没有一种方法可以让在for循环中创建的视图通过其标记id访问?如果没有,是否有更好的方法实现以下目标?我的猜测是,因为我正在覆盖'myView'变量,所以它将始终是for循环的最后一个值。但有没有一种方法可以实现下面这样的目标?[快速] var myView = UIView(); // Create a for loop of 20 Views on different x/y axis var myView = UIView(); var leftPos : CGFloat = 0; f

有没有一种方法可以让在for循环中创建的视图通过其标记id访问?如果没有,是否有更好的方法实现以下目标?我的猜测是,因为我正在覆盖'myView'变量,所以它将始终是for循环的最后一个值。但有没有一种方法可以实现下面这样的目标?[快速]

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()
var myView=UIView();
//在不同的x/y轴上创建包含20个视图的for循环
var myView=UIView();
变量leftPos:CGFloat=0;
对于(变量i=0;i<20;i++){
myView.backgroundColor=UIColor.clearColor()
myView.tag=i;
myView.frame=CGRect(x:leftPos,y:0,宽度:20,高度:20)
添加子视图(myView)
leftPos+=20;
}
//然后,稍后通过其标记id引用它:
myView.tag[13].backgroundColor=UIColor.redColor()

您可以使用
viewWithTag
功能找到带有特定标记的视图:

view = mySuperView.viewWithTag(13)

请注意,使用标记0是“不好的”,因为如果不使用其他值,这是默认标记值。

您可以使用
viewWithTag
功能找到具有特定标记的视图:

view = mySuperView.viewWithTag(13)

请注意,使用标记0是“不好的”,因为如果不使用其他值,这是默认的标记值。

与其使用标记,我建议更好的解决方案是保留一个视图数组,您可以通过索引进行引用

// 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()
//声明一个变量以保留子视图
变量视图=[UIView]()
//创建20个视图,将它们添加为子视图,并将它们添加到视图阵列中

对于0中的i..而不是使用标记,我建议更好的解决方案是保留一个视图数组,您可以通过索引进行引用

// 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()
//声明一个变量以保留子视图
变量视图=[UIView]()
//创建20个视图,将它们添加为子视图,并将它们添加到视图阵列中

因为我在0…啊,太简单了,我知道这很容易。非常感谢大卫!很高兴您提到了默认标记值。:)啊,太简单了,我知道这很简单。非常感谢大卫!很高兴您提到了默认标记值。:)这是个好主意!谢谢阿比泽恩!这可能是一个更好的方法。我刚刚回答了这个问题:)谢谢你,你救了我在自动布局和滚动视图方面的麻烦。这是一个好主意!谢谢阿比泽恩!这可能是一个更好的方法。我只是回答了这个问题:)你救了我在autoLayout和scrollView上的麻烦,谢谢。