gpt4 book ai didi

ios - 在 UIView 中循环遍历 UIButtons

转载 作者:搜寻专家 更新时间:2023-10-31 08:17:42 25 4
gpt4 key购买 nike

我的设置如下:

UIView(1) -> UIScrollview -> UIStackview -> UIViews(2) -> UIButton

如何循环遍历 UIStackview 中所有 UIViews(2) 中的每个 UIButton?我的 UIView(1) 中有更多按钮,因此我无法遍历整个 Viewcontroller 中的每个按钮。我试过:

for view in self.stackview.subviews as [UIView] {
if let btn = view as? UIButton {
print("Worked")
}
}
for view in self.scrollview.subviews as [UIView] {
if let btn = view as? UIButton {
print("Worked")
}
}
for case let button as UIButton in self.scrollview.subviews {
print("worked")
}
for case let button as UIButton in self.stackview.subviews {
print("worked")
}

尝试将其添加到我的 viewDidLoad 函数时,它只是不打印任何内容。我在这里做错了什么?

最佳答案

想到的第一个解决方案:

let buttons = self.stackview.subviews // direct subviews of stack view
.map { subview in subview.subviews } // second level subviews
.joined() // join the second level subviews into one flat array
.compactMap { $0 as? UIButton } // filter buttons

基本上你只是忘记跳到第二层。您仅迭代第一级 subview 。

如果你想要一个更稳定的解决方案,你可以递归迭代任何深度的 subview ,例如使用类别:

extension UIView {
var allSubviews: [UIView] {
return self.subviews + self.subviews.map { $0.allSubviews }.joined()
}
}

然后

let buttons = self.stackview.allSubviews.compactMap { $0 as? UIButton }

关于ios - 在 UIView 中循环遍历 UIButtons,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42629306/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com