[英]How can I swizzle UIView.init
我正在尝试调整 UIView 的 init 方法以及任何它的子类。 到目前为止,我的尝试只会导致崩溃或根本没有做任何明显的事情。
尝试实现的结果是能够覆盖视图边框颜色和宽度的值,以尝试在不需要附加调试器的情况下可视化视图框架。
我以前从未尝试过 swizzling,但很想尝试一下 - 一个快速的谷歌发现这篇文章解释了如何使用extension
来做到这一点。
extension UIView {
static let classInit: Void = {
guard let originalMethod = class_getInstanceMethod(
UIView.self,
#selector(layoutSubviews)
), let swizzledMethod = class_getInstanceMethod(
UIView.self,
#selector(swizzled_layoutSubviews)
) else {
return
}
method_exchangeImplementations(originalMethod, swizzledMethod)
}()
@objc func swizzled_layoutSubviews() {
swizzled_layoutSubviews()
self.layer.borderColor = UIColor.red.cgColor
self.layer.borderWidth = 2
}
}
然后,您只需要确保在 AppDelegate didFinishLaunchingWithOptions
方法中或在应用程序开始的某个地方运行 swizzle
UIView.classInit
上面的代码适用于我在 iOS 13.7 模拟器上,但从我读过的内容来看,你真的不应该尝试覆盖这样的方法,特别是从这样的核心 object,如果可能的话,子类UIView
会更安全。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.