如何在Swift 3.0中遍历屏幕上的所有UIButtons?
我正在尝试做一个循环来遍历视图中找到的所有UIButtons,以便更改每个按钮的位置。 (参见下面的代码)如何在Swift 3.0中遍历屏幕上的所有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
}
然而,当我调试代码我发现环路没有找到任何按钮,因此,位置保持不变。 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
。
这不是一个有效的测试。不要创建一个'UIView'数组。创建一个'UIView',然后将其他视图添加为子视图。 – rmaddy
UIView.subviews _is_ UIViews数组。无论如何更新的答案更加精确。也许添加一个self.view.subviews的日志。 – shallowThought
您的按钮是否指向'self.view'的子视图,还是它们在视图层次结构中进一步向下? – rmaddy
@rmaddy的层次结构是这样的视图控制器 - >查看 - >按钮 – forseth31