我知道如何让所有这些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
}
答案 0 :(得分:6)
假设您在UIView的-tag
方法中使用了标记,并且这些视图都在containerView
BOOL allHidden = YES;
for (int i = 1; allHidden == YES && i <= 35; i++) {
allHidden = [[containerView viewWithTag:i] isHidden];
}
if (allHidden) {
do_something();
}
答案 1 :(得分:4)
如何保持一系列测试呢?
然后你可以简单地做一些事情:
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(根据对这个答案的评论)。
答案 2 :(得分:1)
这可能不完全正确,但是:
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中会更好。
答案 3 :(得分:1)
它们是否都包含在同一个超级视图中?如果是这样,试试这个以利用它们已经在数组中的事实:
@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