如何快速引用所有子视图层次结构

eif*_*cht 2 xcode uiview ios swift swift3

你好,我想一些样式应用到IBOutletsSwift 3代码。但是,当我试图参照的IBOutlet从我的代码,只有当我加入immediatelly优越的工作UIView作为IBOutlet

例如(为 View 内的所有标签元素添加字体样式):

宣言

@IBOutlet var exampleView: UIView!
Run Code Online (Sandbox Code Playgroud)

里面 ViewDidLoad() func

for case let label as UILabel in exampleView.subviews {
            label.font = UIFont(name: "myfont-name", size: 13.0)
}
Run Code Online (Sandbox Code Playgroud)

在这种情况下, thelabel是the的直接子代,exampleView这很好用。但我想在我的应用程序中为动态字体类型更改做更多通用代码。

当我尝试引用self.view.subviewsfor 循环所有标签时,没有数学层次结构深度,代码不起作用。

例子:

for case let label as UILabel in self.view.subviews {
            label.font = UIFont(name: "myfont-name", size: 13.0)
}
Run Code Online (Sandbox Code Playgroud)

Akh*_*jtr 5

为此使用递归

func setFontToSubviews(view:UIView, font: UIFont) {
    for subview in view.subviews {
        if let label = subview as? UILabel {
             label.font = font
        }
        setFontToSubviews(view:subview, font:font)
    }
}
Run Code Online (Sandbox Code Playgroud)

并使用所需的视图和字体调用此方法。