簡體   English   中英

更改在for循環中創建的UIView的屬性

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM