UILabel
サブクラスを使用してiOSでクラッシュするという問題があります。今度はを無効にしてlayoutIfNeeded
を呼び出すと、stackoverflow-answers(e.g. this one)の問題が解決する可能性があります。UILabel setText:method in Swift
しかし、これをどのように達成できますか? Objective-Cでは大したことではありませんでしたが、SwiftではsetText:
を無効にする方法はありません。
UILabel
サブクラスを使用してiOSでクラッシュするという問題があります。今度はを無効にしてlayoutIfNeeded
を呼び出すと、stackoverflow-answers(e.g. this one)の問題が解決する可能性があります。UILabel setText:method in Swift
しかし、これをどのように達成できますか? Objective-Cでは大したことではありませんでしたが、SwiftではsetText:
を無効にする方法はありません。
text
をオーバーライドし
text
プロパティが設定されているときに実行されます
didSet
のコード提供
:私はスイフト2.0のメソッドスウィズリングを引っ張る
class MyLabel: UILabel {
override public var text: String? {
didSet {
layoutIfNeeded()
}
}
}
ここで正解です。 1分ほどで私を打つ。 :) –
これがペン先の中でうまくいかない理由がわからない。うーん... –
@DanRosenstarkインターフェースビルダーと迅速なクラスの両方で、あなたのuilabelをカスタムuilabelに変更しましたか?このようにして、set textメソッドをオーバーライドすることができます。 – mkeremkeskin
を。オーバーライドUILabelのsetTextメソッド。
コピーアプリデリゲートのコードとアプリケーションレベルが私の答えはあなたの問題を解決した場合は、それを受け入れることを横にチェックマークをクリックしてください
// 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)
}
}
を変更するためにcustomSetTextを使用しています。そうでない場合は、問題を明確にしてください。 – vacawama