使用UILabel的子类覆盖UIButton中的titleLabel

时间:2018-05-25 19:24:33

标签: ios swift uibutton uilabel

我有一个UILabel的子类:

class MyLabel: UILabel {}

我想将此标签用作UIButton的titleLabel:

class MyButton: UIButton { 

    var label: MyLabel!

    override open var titleLabel: MyLabel? {
        get {
            return label
        }
    }
}

它在XCode中编译,但我想在Cocoapods的框架中使用它。当我尝试将其推送到存储库时,它会验证代码。它抛出一个错误:

  

警告| [iOS] xcodebuild:/Users/user/Library/Developer/Xcode/DerivedData/App-dprjfnapcavegfcniqgbxhrinmym/Build/Products/Release-iphonesimulator/vieww/vieww.framework/Headers/vieww-Swift.h:197:63:   警告:属性类型'MyLabel * _Nullable'与。不兼容   输入'UIButton'继承的'UILabel * _Nullable'

如何覆盖titleLabel?是否可以使用子类?

1 个答案:

答案 0 :(得分:0)

更改MyButton类,以使titleLabel的返回类型为UILabel?

class MyButton: UIButton {

    var label: MyLabel!

    override open var titleLabel: UILabel? {
        get {
            return label
        }
    }
}

这会使正在生成的警告静音。但是当你想使用MyLabel功能访问titleLabel时,你必须像这样进行转换:

if let myLabel = button.titleLabel as? MyLabel {
            print(myLabel.classForCoder)
        }

希望这个黑客解决这个问题。