我对编程有点新意。使用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语句,但它处理相互依赖的计算。非常感谢任何帮助。
答案 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"];