如何在所有viewControllers viewDidLayoutSubviews函数中自动强制运行一个方法?

时间:2017-11-01 17:59:54

标签: ios iphone swift

说我有这个扩展程序可以帮助我更改UIViewController

的所有文本元素中的字体大小
extension UIView {
    func changeFontSize(){
        let fontSize = CGFloat(5)
        if let v = self as? UIButton {
            v.titleLabel?.font = v.titleLabel?.font.withSize(fontSize)
            print("didChangeFontSizeFor_Button")
        } 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()
            }
        }
    }
}

当我这样称呼它时,它工作正常

override func viewDidLayoutSubviews() {
    view.changeFontSize()
}

现在问题是,有没有办法让我在所有viewControllers中强制使用它更加动态?

说我们有3个视图控制器,我想创建一些CocoaPods库,人们可以像这样进行简单的调用

forceAppFontSize.fontSize = CGFloat(15)

更改所有其他屏幕的字体大小..

第1课

import UIKit
class v1: UIViewController{
     override func viewDidLayoutSubviews() {
          print("someCommand1")
          print("someCommand2")
     }
}

第2课

import UIKit
class v2: UIViewController{
     override func viewDidLayoutSubviews() {
          print("someCommand")
     }
}

第3课

import UIKit
class v3: UIViewController{
}

有没有办法在不破坏原始viewDidLayoutSubviews的情况下实现这种动态?例如,参见第1类,视图中已经有一些命令未被销毁或替换。

1 个答案:

答案 0 :(得分:1)

有一种更简单的方法。您的实际目标是更新应用中的所有观看次数。无需通过每个视图控制器。只需在您应用的主窗口中调用changeFontSize()扩展程序。