[英]Change properties of UIView created in for loop
我在主視圖中添加了一些UIView,以編程方式將它們彼此相鄰,如下所示:
//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循環外部更改顏色,這些行都不會更改顏色。 為什么會這樣呢? 有什么辦法可以改變線條的顏色?
謝謝
問題可能與如何聲明事物(單個視圖)和如何創建事物(潛在的視圖數組)有關。 為什么不使用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之后,您需要提防任何視圖都可能將其tag屬性設置為此行號,甚至是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
}
}
}
}
好吧,這很奇怪-因為它對我有用。 我將您的代碼放入函數中,如果在循環中設置了backgroundColor,則每一行都會更改,如果將其置於循環外,則僅最后一行會更改。
愚蠢的問題,但您未指定這些行的大小-是否有可能將最后一行從屏幕上繪制出來,以便您看不到?
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.