编写此代码的方法较短?

时间:2010-02-20 05:54:08

标签: iphone refactoring sdk uiimageview

我知道如何让所有这些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
}

4 个答案:

答案 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)

http://developer.apple.com/mac/library/documentation/cocoa/Conceptual/KeyValueCoding/Concepts/BasicPrinciples.html#//apple_ref/doc/uid/20002170-BAJEAIEE

这可能不完全正确,但是:

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