我確實遇到了一個問題,我在iOS中遇到了一些與UILabel
子類有關的崩潰問題。現在我想覆蓋setText:
致電layoutIfNeeded
,因爲這可能會解決問題根據一些stackoverflow答案(e.g. this one)。重寫UILabel setText:在Swift中的方法
但我該如何做到這一點?在Objective-C中沒有什麼大不了的,但我沒有找到在Swift中重寫setText:
的方法。
我確實遇到了一個問題,我在iOS中遇到了一些與UILabel
子類有關的崩潰問題。現在我想覆蓋setText:
致電layoutIfNeeded
,因爲這可能會解決問題根據一些stackoverflow答案(e.g. this one)。重寫UILabel setText:在Swift中的方法
但我該如何做到這一點?在Objective-C中沒有什麼大不了的,但我沒有找到在Swift中重寫setText:
的方法。
重寫屬性text
,並提供didSet
代碼時text
屬性設置將得到執行:
class MyLabel: UILabel {
override public var text: String? {
didSet {
layoutIfNeeded()
}
}
}
正確的答案在這裏。打我一分鐘。 :) –
不知道爲什麼這不是在一個筆尖內工作。嗯...... –
@DanRosenstark你是否在界面生成器和Swift類上將你的uilabel變成了自定義的uilabel。通過這種方式,我可以覆蓋設置的文本方法。 – mkeremkeskin
我的雨燕2.0拉法混寫的。使用UILabel的setText方法。
拷貝到應用程序委託的代碼,並使用customSetText進行應用層面的變化
// MARK: - Method Swizzling
extension UILabel {
public override class func initialize() {
struct Static {
static var token: dispatch_once_t = 0
}
// make sure this isn't a subclass
if self !== UILabel.self {
return
}
dispatch_once(&Static.token) {
let originalSelector = Selector("setText:")
let swizzledSelector = Selector("customSetText:")
let originalMethod = class_getInstanceMethod(self, originalSelector)
let swizzledMethod = class_getInstanceMethod(self, swizzledSelector)
let didAddMethod = class_addMethod(self, originalSelector, method_getImplementation(swizzledMethod), method_getTypeEncoding(swizzledMethod))
if didAddMethod {
class_replaceMethod(self, swizzledSelector, method_getImplementation(originalMethod), method_getTypeEncoding(originalMethod))
} else {
method_exchangeImplementations(originalMethod, swizzledMethod)
}
}
}
// MARK: - Custom set text method for UI Label
func customSetText(text: String) {
self.customSetText(text)
//set custom font to all the labels maintaining the size UILabel
self.font = UIFont(name: "Lato-LightItalic", size: self.font.pointSize)
}
}
如果我的回答解決您的問題,請點擊勾選旁邊接受它。如果沒有,請澄清你的問題。 – vacawama