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 несколько раз для разных состояний.

Теперь он работает в соответствии с Xcode 8.3.3

Другие вопросы по тегам