2014-12-17 4 views
2

Я пытаюсь реализовать локализуемый класс для UIButtons, используя live-рендеринг в Interface Builder. Это код, который я до сих пор:IBInspectable setTitle: forState on 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

Любые идеи о том, как исправить это, приветствуются!

ответ

0

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

+1

Использование '' setTitle' для TARGET_INTERFACE_BUILDER' на прошивкой 10/Xcode 8 beta6 не работает для меня. Вместо этого я смог успешно установить название ярлыка кнопки, получив прямой доступ к его свойству, то есть 'myButton.labelTitle? .text = myText' – flochtililoch

2

типа UIButton должен быть на заказ, то SETTITLE работает

Смежные вопросы