2017-05-22 1 views
0

私はXcode UIBuilderにキーを入力できるようにするすべてのUIButtonサブクラスの拡張を行い、そのキーを実際には適切な言語に自動的に変更しますビルド時間。SwIBlide/Xcodeでローカリゼーション用に@IBinspectableを使用したUIButton

私はアプリを実行するとうまく動作しますが、ビルダーで入力したキーワードはUIでローカライズされていません。

私は#ifビルダーステートメントとprepareForInterfaceBuilder()を試してみました。 これは私がこれまでに得たものである:

extension UIButton { 
@IBInspectable var localizedText: String { 
    set (key) { 
     self.setTitle(key.localized, for: .normal) 
    } 
    get { 
     return (self.titleLabel?.text)! 
    } 
    } 
} 

class Button: UIButton { 
. 
. 
. 
override func prepareForInterfaceBuilder() { 
     super.prepareForInterfaceBuilder() 
     self.titleLabel?.text = localizedText 
    } 
} 

任意の助けをいただければ幸いです!

答えて

0

私は.localized言うことを忘れてしまった...

extension UIButton { 
    @IBInspectable var localizedTitle: String { 
     get { return "" } 
     set { 
      self.setTitle(newValue.localized, for: .normal) 
     } 
    } 
} 

extension String { 
    var localized: String { 
     get { return NSLocalizedString(self, comment: "") } 
    } 
} 
+0

をこの拡張機能を使用自体にNSLocalizedStringを呼び出し、結果を返す文字列の拡張機能です。 私たちのコードの唯一の違いは、あなたが ""を返し、変数としてnewValueを使うことです。 ビルダーで設定された値をnewValueとして使用しようとしています。 –

+0

あなたの文字列の拡張子はここでは機能していません??? – Bilal

+0

私は文字列の拡張子で答えを更新しました...投稿前にテストしました... – Bilal