我正在尝试编写扩展程序,以更改UIControl
组件字体大小
extension UIViewController {
func changeFontSize(){
for v in self.view.subviews{
var fontSize = CGFloat(10)
if let V = v as? UIButton {V.titleLabel?.font = V.titleLabel?.font.withSize(fontSize)}
if let V = v as? UILabel {V.font = V.font.withSize(fontSize)}
if let V = v as? UITextField {V.font = V.font?.withSize(fontSize)}
}
}
我的问题是UITableView等一些组件,如何访问单元格元素,以及UITableView Section标题组件,以便我使扩展名也改变所有类型文本字体的所有子视图?
答案 0 :(得分:5)
您需要一个递归实现,以便进入任何视图的子视图。您的扩展程序应位于UIView
,而不是UIViewController
。
extension UIView {
func changeFontSize(){
let fontSize = CGFloat(10)
if let v = self as? UIButton {
v.titleLabel?.font = v.titleLabel?.font.withSize(fontSize)
} else if let v = self as? UILabel {
v.font = v.font.withSize(fontSize)
} else if let v = self as? UITextField {
v.font = v.font?.withSize(fontSize)
} else {
for v in subviews {
v.changeFontSize()
}
}
}
}
如果您希望在视图控制器上调用它,请执行以下操作:
someViewController.view.changeFontSize()
答案 1 :(得分:2)
另一个常见选项是使用UIAppearance
由于UIButton
使用UILabel
作为子视图,因此它也适用于此。
extension UILabel {
var defaultFont: UIFont? {
get { return self.font }
set { self.font = newValue }
}
}
UILabel.appearance().defaultFont = UIFont.systemFont(ofSize: 25)
重复UITextField
和其他控件。