Xcode 界面生成器 UI 中是否有字符串的替换文本语法?

Is there substitution text syntax for strings in Xcode interface builder UI?

我有一个 Objective C++ 程序用于处理我们不同应用程序的设置。有没有一种方法可以使用预处理器定义来创建要在 NSTextFieldCell、NSButtonCell 使用的字符串中替换的文本?

例如,不是有一个表示 "Options for setting up Foo" 的 NSTextField,而是有一个预处理器宏 (GCC_PREPROCESSOR_DEFINITIONS):

MY_PROGRAM_NAME=Bar

然后 NSTextField 的文本将是:

"Options for setting up $(MY_PROGRAM_NAME)"

然后会得到想要的结果:"Options for setting up Bar"

注意 1:显然,我可以在代码中以编程方式进行替换。

注意 2:这是 Xcode7 的,所以可能没有这样的功能?

一句话,没有。 Xcode nib 编译器不执行任何类型的变量替换,并且一旦编码,所有存档的 属性 值都是静态的。

但是,如果这是一个 "thing" 适合您的应用程序,并且没有太多视图 class 涉及(例如,只有 NSTextField),那么滚动起来并不难你自己的解决方案。

我会考虑这种方法:

  • 编造一个易于替换的语法,la "Some string {VAR_NAME}"。
  • 在字典中将变量定义为 key/value 对。储存 字典作为应用程序包中的 XML 文件/字典。
  • 在应用程序启动时,加载字典并将其 public 放入 全局变量或将其添加到 -[NSUserDefaults registerDefaults:]
  • Subclass NSTextField(举个例子)。覆盖其中一个 -initWithCoder:-awakeFromNib。在覆盖中,获取字符串 视图对象的值,使用 public 扫描它以进行替换 变量字典,并根据需要更新字符串 属性。
  • 在 IB 中,将需要此功能的任何 NSTextField 的 class 更改为 你的自定义子class.

另一种可能的方法是在您的项目中有多个目标,并为每个目标创建一个单独的 Localizable.strings 文件。这当然假设您使用 Localizable.strings,即使您可能只支持一种语言。