与孩子一起存储UIView

时间:2015-05-04 02:44:02

标签: swift for-loop uiview

我在2x2网格上工作,每个人都有一个UIView和一个带有文字和背景颜色的子标签。

我用这样的for循环生成UIView:

// Generatin answer cube buttons
        for var i = 0; i < cubeCount; i++
        {
            // two answers case
            if(cubeCount < 3)
            {
                var btn = button(xpos, y: ypos, width: screenWidth, height: (screenHeight * 2));
                var lbl = labelis("\(i)", btn: btn)
                btn.addSubview(lbl)

                xpos = xpos + (screenWidth + 10);
                self.view.addSubview(btn);
            }
            // 3+ answers case
            else
            {
                var btn = button(xpos, y: ypos, width: screenWidth, height: screenHeight);
                var lbl = labelis("\(i)", btn: btn)
                btn.addSubview(lbl)

                xpos = xpos + (screenWidth + 10)
                self.view.addSubview(btn)

                // change row in case of more than 2 answers
                if(i == 1)
                {
                    xpos = 20
                    ypos = ypos + (screenHeight + 10)
                }
            }

我还有一个tapGesture功能让我知道当我点击其中一个答案立方体时。

我的问题是,当点击其中一个立方体时,我想访问所有立方体并更改其标签的背景颜色。

我虽然将UIView存储到一个数组中,所以我可以通过tapGesture函数对它们进行操作,但我不知道如何才能使它工作。

我认为也许有人可以引导我解决这个问题。 感谢。

2 个答案:

答案 0 :(得分:0)

在立方体按钮的点击处理程序中,尝试以下代码:

for subview in view.subviews as [UIView] {
    if let cubeButton = subview as? button {
        //Do something with this cubeButton here.
    }
}

答案 1 :(得分:0)

所以我找到了解决问题的方法,所以我回答了自己的问题,以便将来可能会对此进行调查:

我创建了一个数组:

var answerData:[UIView] = [];

并为我想要存储的人添加了我的UIView

var uiviewvariable = UIView()    
answerData.append(uiviewVariable)

然后,在我的tapGesture函数上,当用户点击其中一个视图时,我可以调用该数组并在UIViews上使用act

// Accessing stored UIView
        for(var i = 0; i < answerData.count; i++){

            // Accessing subviews
            for subview in answerData[i].subviews as [UIView]
            {
                if subview.tag == 0
                {
                    if let label = subview as? UILabel {
                        // do something with label inside the views
                    }
                }                
            }
        }

出于某种原因,我使用类似于阿卜杜拉的答案来选择我的标签,但我没有设法让他的代码片段工作。