我在主视图中添加了一些UIViews,一个在另一个旁边,以编程方式添加,如下所示:
//global variable
var lastLine: UIView!
//inside a function
for(var line = 0; line <= numberOfLines; line++){
lastLine = UIView(frame: CGRect(x: lengthOfSpace + lengthOfLine * CGFloat(line) + lengthOfSpace * CGFloat(line), y: 8 * view.frame.height/10, width: lengthOfLine, height: 7))
lastLine.backgroundColor = UIColor.whiteColor()
lastLine.layer.cornerRadius = lastLine.frame.height/4
view.addSubview(lastLine)
}
现在我想改变我创建的最后一行的颜色,所以我这样做了:
lastLine.backgroundColor = UIColor.blueColor()
但是,只要我尝试从for循环外部更改颜色,就不会改变颜色。为什么会这样?有什么方法可以改变线条的颜色吗?
谢谢
答案 0 :(得分:1)
问题可能围绕如何声明事物(单个视图)与创建它们的方式(潜在的视图数组)。为什么不使用UIView的tag属性来操作你想要更改的特定视图?
假设您有5行/视图,并希望操纵第3行。
创建5个视图的代码:
var numberOfLines:Int = 0
for line in 1...numberOfLines {
let newView = UIView()
// code to create and position UIView
newView.tag = line
view.addSubview(newView)
}
操纵第三行/视图的代码:
func alterLine(_ lineNumber:Int) {
for view in view.subviews as [UIView] {
if view.tag = lineNumber {
// change view code
}
}
}
由于您使用UIViews,您需要注意任何视图可能将其标记属性设置为此行号,甚至是UISlider!为了解决这个问题,您可以继承UIView和LineView,并且alterLine()将是:
func alterLine(_ lineNumber:Int) {
for view in self.view.subviews as [UIView] {
if let lineView = view as? LineView {
if lineView.tag = lineNumber {
//change LineView code
}
}
}
}
答案 1 :(得分:0)
愚蠢的问题,但是你没有指定这些行的大小 - 是否有可能在屏幕上绘制最后一行,以便你看不到它?