4

我正在尝试使用 Interface Builder 中的实时渲染为 UIButtons 实现可本地化的类。这是我到目前为止的代码:

@IBDesignable class TIFLocalizableButton: UIButton {

    @IBInspectable var localizeString:String = "" {
        didSet {
            #if TARGET_INTERFACE_BUILDER
                var bundle = NSBundle(forClass: self.dynamicType)
                self.setTitle(bundle.localizedStringForKey(self.localizeString, value:"", table: nil), forState: UIControlState.Normal)
            #else
                self.setTitle(self.localizeString.localized(), forState: UIControlState.Normal)
            #endif
        }
    }

}

布局在 IB 中正确更新,但文本未显示。我用 UILabel 创建了相同的实现,它确实有效: https ://github.com/AvdLee/ALLocalizableLabel

欢迎任何有关如何解决此问题的想法!

4

3 回答 3

3

UIButton 类型应该是自定义然后 setTitle 作品

于 2017-01-03T11:50:52.777 回答
1

在 WWDC,我问了一位工程师。原来是这样修复的:

override func setTitle(title: String?, forState state: UIControlState) {

    #if TARGET_INTERFACE_BUILDER
        let bundle = NSBundle(forClass: self.dynamicType)
        super.setTitle(bundle.localizedStringForKey(self.localizeString, value:"", table: nil), forState: UIControlState.Normal)
    #else
        super.setTitle(title, forState: state)
    #endif
}

由于界面构建器针对不同的状态多次调用 setTitle。

于 2015-06-11T15:49:41.173 回答
0

它现在按照 Xcode 8.3.3 工作

于 2017-08-08T21:15:52.987 回答