首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >Swift:获取特定类型的所有子视图并添加到数组中

Swift:获取特定类型的所有子视图并添加到数组中
EN

Stack Overflow用户
提问于 2015-08-22 10:22:22
回答 9查看 50.1K关注 0票数 55

我在一个UIView中有一个自定义的按钮类,我想把它添加到一个数组中,这样就可以很容易地访问它们。有没有办法获取特定类的所有子视图并将其添加到Swift中的数组中?

EN

回答 9

Stack Overflow用户

发布于 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)
票数 41
EN

Stack Overflow用户

发布于 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)
票数 22
EN

Stack Overflow用户

发布于 2015-08-22 11:34:50

我现在不能测试它,但这应该可以在Swift 2中工作:

view.subviews.flatMap{ $0 as? YourView }

它返回一个YourView数组

下面是一个经过测试的典型示例,用于获取计数:

countDots = allDots!.view.subviews.flatMap{$0 as? Dot}.count
票数 13
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/32151637

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档