Короче способ написания этого кода? - PullRequest
2 голосов
/ 20 февраля 2010

Я знаю, как заставить все эти uimageviews исчезнуть и вернуться снова, но я не знаю, как написать это коротко Им всем назначены уникальные теги 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 ]

6 голосов
/ 20 февраля 2010

Предполагается, что вы имели в виду тег, как в методе -tag в UIView, и все эти представления находятся в containerView

BOOL allHidden = YES;
for (int i = 1; allHidden == YES && i <= 35; i++) {
    allHidden = [[containerView viewWithTag:i] isHidden];
}
if (allHidden) {
   do_something();
}
4 голосов
/ 20 февраля 2010

Как насчет хранения массива тестов?

Тогда вы можете просто сделать что-то вроде:

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.

1 голос
/ 20 февраля 2010

Все ли они содержатся в одном суперпредставлении? Если это так, попробуйте воспользоваться тем, что они уже находятся в массиве:

@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
1 голос
/ 20 февраля 2010

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 будет лучше.

...