如何在Swift 3.0中遍历屏幕上的所有uibutton



我试图做一个循环来迭代通过视图上发现的所有UIButtons,以改变每个按钮的位置。(见下面的代码)

        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
        }

然而,当我调试代码时,我发现循环没有找到任何按钮,因此位置保持不变。我有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

最新更新