簡體   English   中英

如何在Swift 3.0中迭代屏幕上的所有UIButtons?

[英]How to iterate through all UIButtons on screen in Swift 3.0?

我正在嘗試循環迭代視圖中找到的所有UIButton,以便更改每個按鈕的位置。 (見下面的代碼)

        for case let button as UIButton in self.view.subviews {
             rect = button.frame
             rect.origin.x = rect.origin.x + 20
             rect.origin.y = rect.origin.y + 20
             button.frame = rect
        }

但是,當我調試代碼時,我發現循環沒有找到任何按鈕,因此位置保持不變。 我在View Controller中的View中有9個按鈕。

誰知道這個循環有什么問題?

你的代碼對我來說很好。 言下之意是,你的按鈕都沒有的子視圖self.view ,但一些人認為進一步下跌的層次結構的子視圖。 您必須編寫循環的遞歸版本。

例如:

func lookForButton(_ v: UIView) {
    let subs = v.subviews
    if subs.count == 0 {return}
    for vv in subs {
        if vv is UIButton {
            print(vv) // just testing: do your real stuff here
        }
        lookForButton(vv)
    }
}
lookForButton(self.view)

你的代碼正在運行。 這個:

var view = UIView()
view.addSubview(UIView())
view.addSubview(UIButton())

for case let button as UIButton in view.subviews {
    print(button)
}

打印:

<UIButton: 0x7fcc9bd07320; frame = (0 0; 0 0); opaque = NO; layer = <CALayer: 0x60000002dca0>>

結論:self.view.subviews不包含任何UIButtons

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

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