Как использовать постоянные строковые переменные в Интерфейсном Разработчике - PullRequest
1 голос
/ 19 декабря 2011

Я создал Constants.h и Constants.m, как предлагается здесь:

Константы в Objective-C

Теперь я хочу также использовать некоторые строки, определенные в Constants.h в Интерфейсном Разработчике, например, чтобы установить текст метки.

Как сделать это, используя привязки?Я думаю, что я должен как-то использовать ObjectController (Mode: Class, Class Name: Constants)?Но каков будет объект содержимого для этого контроллера (поскольку у меня нет переменных типа Constants)?Может быть, использовать Singleton в Constants.m?Есть предложения?

1 Ответ

2 голосов
/ 19 декабря 2011

Я не думаю, что вы можете связать строки каким-либо образом.

Я бы порекомендовал сделать это в коде viewDidLoad.

Обратите внимание, что строковые константы не так хорошидля текстов в пользовательском интерфейсе.

РЕДАКТИРОВАТЬ:

Xibs имеют свою собственную систему локализации, но я не думаю, что это очень хорошо.Это в основном означает создание нового xib для каждого языка.Если вы поддерживаете только один язык, просто поместите свои строки в xib, и проблема будет решена.

ПРИМЕЧАНИЕ: ниже приводится идея для моего текущего проекта, и я еще не реализовал ее, но я полагаю, что это будетдавайте легко добавим новые языковые переводы.

Моя идея для лучшей локализации xib состоит в том, чтобы определить IBOutlet для каждого локализуемого компонента (например, myButton1, myTextField1), а затем написать файл с локализованными строками (xml, properties, plist и т. д.).) где каждая строка вводится с помощью имени IBOutlet, например:

   myXib1.myButton1.selected.title = This is a button.
   myXib1.myTextField1.placeholder = "This is text field placeholder"

Затем необходимо написать метод, который принимает имя xib, находит текущий язык и просматривает все свойства строки для данного xib.Он может использовать [NSObject performSelector:] для доступа к получателям IBOutlet:

id localizableView = [self performSelector:NSSelectorFromString(@"myButton1")];

, и вы вызываете этот метод из viewDidLoad (или вы создаете класс UILocalizedController, который вызывает его автоматически, и все вашиконтроллеры будут его потомком).

Также обратите внимание, что существует класс NSLocalizedString, который должен помочь вам с локализацией.

...