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,即使您可能只支持一种语言。
我有一个 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,即使您可能只支持一种语言。