IBInspectable setTitle:forState на UIButton не работает
Я пытаюсь реализовать локализуемый класс для UIButton с использованием рендеринга в реальном времени в Интерфейсном Разработчике. Это код, который я до сих пор:
@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
Любые идеи о том, как это исправить, приветствуются!
3 ответа
Тип UIButton должен быть пользовательским, тогда setTitle работает
На 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 несколько раз для разных состояний.