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

内容来源于 Stack Overflow,并遵循CC BY-SA 3.0许可协议进行翻译与使用

  • 回答 (2)
  • 关注 (0)
  • 查看 (45)

我在UIView中有一个自定义的按钮类,我想将它添加到数组中,这样就可以轻松地访问它们。是否有一种方法可以获取特定类的所有子视图并将其添加到SWIFT中的数组中?

提问于
用户回答回答于

filter使用is操作符的函数可以过滤特定类的项目。

let myViews = view.subviews.filter{$0 is MyButtonClass}

MyButtonClass 是要过滤的自定义类。

用户回答回答于

这就是你要的

    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)

扫码关注云+社区