我可以在Objective C的switch语句中构建案例吗?

时间:2013-12-02 15:16:34

标签: switch-statement

我对编程有点新意。使用Objective-C更是如此。我试图根据在前一个屏幕上输入的值显示标签和文本框。这是我现在拥有的:

switch (previousValue) {
   case 1:
      [label1 setHidden:FALSE];
      [textField1 setHidden:FALSE];
      break;

   case 2:
      [label1 setHidden:FALSE];
      [textField1 setHidden:FALSE];
      [label2 setHidden:FALSE];
      [textField2 setHidden:FALSE];
      break;

   case n:
      [label1 setHidden:FALSE];
      [textField1 setHidden:FALSE];
      [label2 setHidden:FALSE];
      [textField2 setHidden:FALSE];
      [labelN setHidden:FALSE];
      [textFieldN setHidden:FALSE];
      break;
}

有更简单的方法吗?我有60个可能的案例。我也以类似的方式使用switch语句,但它处理相互依赖的计算。非常感谢任何帮助。

2 个答案:

答案 0 :(得分:0)

看起来你有N< = 60个标签/文本文件并为每个隐藏设置:根据值设置为False。使用这样的switch语句会增加代码大小,并且它的可读性不高。 更好的方法是使用bitFiled:位域中的每个位对应一个标签/文本字段 - bit3用于label3 / textField3。

假设您只有8个标签/文本字段 - 您只需要为更多位选择更大的数据类型 - 并查看您将如何编码:

char Bitfield;

int mask =0x01;
for( i=0;i<8;i++)
{
    if (bitfield&mask)
    {
     setHidden(i); // sets the attributes for label/textfield i
    }
   mask>>=1;
}

除了代码变得更易读之外,现在您可以单独控制每个标签/文本字段 - 如果您愿意,可以仅为标签/文本字段1和5设置属性。

答案 1 :(得分:0)

如果他们是IBOutlets,您可以设置IBOutletCollections,这将创建您想要组织的出口阵列。然后你可以简单地打电话:

[_outlets setValue:@NO forKeyPath:@"hidden"];