0

我的带有各种类型项目列表的 tableViewController 将提供一个按钮来显示模式对话框。此对话框(类似于警报视图)将为用户提供从 6 个选项列表中的唯一选择。根据用户选择和确认的内容,主 tableview 控制器屏幕中的列表将被过滤以仅显示与所选类型匹配的项目。目前,我在 typedefed 枚举中列出了这六种类型。到现在为止还挺好。但是,我还需要能够使用六个 nsstring 填充我的自定义对话框,这些 nsstring 的名称将与枚举中使用的类型匹配。如何使这个枚举与我对这些字符串的来源的要求相协调,但要确保两者之间的某种程度的一致性?我不想硬编码任何东西。

4

3 回答 3

2

您需要一个帮助方法,它为每个枚举值返回一个字符串。这应该被写来处理可能的本地化。您的所有数据和事件处理都应基于枚举值。该字符串应用于显示。

辅助方法应采用枚举值并使用 switch 语句返回正确的字符串。

于 2012-12-07T19:47:36.073 回答
1

我能想到几个:

  • 将枚举更改为一堆字符串。如果它们也需要是整数,这会使事情变得有点乏味(-[NSArray indexOfObject:])。
  • 制作一个 C 字符串数组。这让您可以使用 C99 的便捷语法:

    NSString * const names[] = {
      [Foo] = @"Foo",
      [Bar] = @"Bar",
    };
    
  • 自动生成的代码来执行上述操作。

注意事项:

  • 这两者都会让 i18n 相当痛苦。如果合同工作只需要使用一种语言,这可能不相关,但这是不好的做法。
  • 使用按钮索引作为键一直有效,直到您决定需要删除中间的按钮。字符串键在一般情况下工作得更好(我编写了一个 UIAlertView/UIActionSheet 包装器,它接受 (key,title) 对并返回键而不是按钮索引)。
于 2012-12-07T19:47:15.247 回答
1

我认为您“不想对任何东西进行硬编码”表示您不希望代码中有任何字符串常量。所以:

您可以简单地将字符串分配给工作表的 UI 元素(例如,可能是复选框),并为这些 UI 元素提供与您的枚举匹配的标记值(您可以在工作表关闭时查询)。这具有额外的好处,您可以轻松地本地化工作表。

或者:

如果您想将字符串与工作表分开,您可以创建一个 .strings 文件(也许您可以将其称为 Enumeration.strings 或类似名称),其格式如下:

"001" = "string one";
"002" = "string two";
.
.
"010" = "string ten";

然后您可以使用您的枚举值检索字符串,如下所示:

NSString *myString = NSLocalizedStringFromTable([NSString stringWithFormat:@"%03d", myEnumerationValue], @"Enumeration", @"");

但是你必须有一种将字符串插入 UI 的方法,通过IBOutlets 跟踪 UI 元素。请注意,我在这里使用了三位小数;也许你可以得到两个,甚至一个。最后,您可以像第一个建议一样进行本地化。

于 2012-12-07T20:57:50.193 回答