2011-12-19 1 views
1

Я создал Constants.h и Constants.m как предложено здесь:Как использовать Постоянные переменные типа String в Interface Builder

Constants in Objective-C

Теперь я хочу использовать некоторые строки, определенные в Constants.h в Interface Builder, чтобы, например, установить текст этикетки.

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

ответ

2

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

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

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

EDIT:

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

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

Моей идеей для лучшей локализации xib является определение IBOutlet для каждого локализуемого компонента (например, myButton1, myTextField1), а затем запись файла с локализованными строками (xml, properties, plist whatever), где каждая строка связана с именем 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, который должен помочь вам в локализации.

+0

Благодарим вас за ответ. Как вы думаете, что было бы лучше? Использование констант в качестве ключей к строкам, хранящимся в файле .strings? Любая другая идея не программировать строки? – Tobold

+0

Ответ обновлен. Короче говоря, если у вас есть только один язык, забудьте о константах и ​​поместите все в xib. Если вы думаете об i18n, прочитайте расширенный ответ. – Sulthan