我在一个UIView中有一个自定义的按钮类,我想把它添加到一个数组中,这样就可以很容易地访问它们。有没有办法获取特定类的所有子视图并将其添加到Swift中的数组中?
发布于 2017-07-25 16:09:10
这就是你要的
extension UIView {
/** This is the function to get subViews of a view of a particular type
*/
func subViews<T : UIView>(type : T.Type) -> [T]{
var all = [T]()
for view in self.subviews {
if let aView = view as? T{
all.append(aView)
}
}
return all
}
/** This is a function to get subViews of a particular type from view recursively. It would look recursively in all subviews and return back the subviews of the type T */
func allSubViewsOf<T : UIView>(type : T.Type) -> [T]{
var all = [T]()
func getSubview(view: UIView) {
if let aView = view as? T{
all.append(aView)
}
guard view.subviews.count>0 else { return }
view.subviews.forEach{ getSubview(view: $0) }
}
getSubview(view: self)
return all
}
}
你可以这样称呼它
let allSubviews = view.allSubViewsOf(type: UIView.self)
let allLabels = view.allSubViewsOf(type: UILabel.self)
发布于 2017-07-05 16:48:34
要递归地执行此操作(也就是获取所有子视图的视图),您可以使用以下通用函数:
private func getSubviewsOf<T : UIView>(view:UIView) -> [T] {
var subviews = [T]()
for subview in view.subviews {
subviews += getSubviewsOf(view: subview) as [T]
if let subview = subview as? T {
subviews.append(subview)
}
}
return subviews
}
要获取视图层次结构中的所有UILabel,只需执行以下操作:
let allLabels : [UILabel] = getSubviewsOf(view: theView)
发布于 2015-08-22 11:34:50
我现在不能测试它,但这应该可以在Swift 2中工作:
view.subviews.flatMap{ $0 as? YourView }
它返回一个YourView
数组
下面是一个经过测试的典型示例,用于获取计数:
countDots = allDots!.view.subviews.flatMap{$0 as? Dot}.count
https://stackoverflow.com/questions/32151637
复制相似问题