写这段代码的更短的方法是?
我知道如何使所有这些uiimageviews消失并再次回来,但我不知道如何写这个更短。他们都被分配了唯一的标签1-35。我想检查它们是否全部隐藏,然后执行操作。写这段代码的更短的方法是?
if(test.hidden==YES
&& test2.hidden==YES
&& test3.hidden==YES
&& test4.hidden==YES
&& test5.hidden==YES
&& test6.hidden==YES
&& test7.hidden==YES
&& test8.hidden==YES
&& test9.hidden==YES
&& test10.hidden==YES
&& test11.hidden==YES
&& test12.hidden==YES
&& test13.hidden==YES
&& test14.hidden==YES
&& test15.hidden==YES
&& test16.hidden==YES
&& test17.hidden==YES
&& test18.hidden==YES
&& test19.hidden==YES
&& test20.hidden==YES
&& test21.hidden==YES
&& test22.hidden==YES
&& test23.hidden==YES
&& test24.hidden==YES
&& test25.hidden==YES
&& test26.hidden==YES
&& test27.hidden==YES
&& test28.hidden==YES
&& test29.hidden==YES
&& test30.hidden==YES
&& test31.hidden==YES
&& test32.hidden==YES
&& test33.hidden==YES
&& test34.hidden==YES
&& test35.hidden==YES){
do something
}
假设你的意思是标签在上的UIView的-tag
方法,而这些观点都在containerView
BOOL allHidden = YES;
for (int i = 1; allHidden == YES && i <= 35; i++) {
allHidden = [[containerView viewWithTag:i] isHidden];
}
if (allHidden) {
do_something();
}
如何保持一组测试呢?
然后,你可以简单地这样做:
int testresult = 0;
for(i = 0; i < 35; i++){
if(test[i].hidden != YES){
testresult = 1;
break;
}
}
if(testresult == 0){
// all tests = yes
}
注意这个使用C数组,而不是一个NSArray。原则上你应该从拥有大量类似命名的变量转换为这些东西的数组 - 在ObjC中,建议使用NSArray(根据对此答案的评论)。
为什么他在ObjC中编程时会使用C数组? – 2010-02-20 06:05:42
@Colin,C数组不允许在ObjC中? – 2010-02-20 06:07:17
他们被允许,但NSArrays负责清理它们在释放时保存的对象。 – Eld 2010-02-20 06:11:46
这可能不准确,但这样的:
BOOL retVal = test.hidden ;
for (int i = 2; i < 36 && retVal; ++i) {
id x = [self valueForKey:[NSString stringFromFormat:@"test%d", i]];
retVal = retVal && x.hidden ;
}
if (retVal) {
// do something
}
虽然我认为存储一个NSArray测试对象会更好。
他们全部包含在相同的上海华?如果是这样,请尝试利用它们已经在数组中的事实:
@implementation UIView (testForHiddenSubviews)
- (BOOL) hasHiddenSubviews
{
for (UIView *view in self.subviews)
if (view.hidden)
return YES;
return NO;
}
- (BOOL) allSubviewsHidden
{
for (UIView *view in self.subviews)
if (!view.hidden)
return NO;
return YES;
}
@end
不要比较'== YES'。 '如果(条件)'足够了。 'if(condition == YES)'可能失败,因为任何非零值都是真值,但可能不等于1('YES')。 – kennytm 2010-02-20 06:07:24
这对我来说似乎有些过分偏执。如果该方法被定义为返回一个BOOL并返回一个BOOL以外的内容,那么这是一个非常重要的失败。我希望Cocoa实际上不会那样做...... – 2010-02-20 07:18:11