2010-02-20 3 views
2

나는이 모든 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 
} 
+1

'== YES'를 비교하지 마십시오. 'if (condition)'이면 충분합니다. 0이 아닌 값이 참값이기 때문에'if (condition == YES)'가 실패 할 수도 있지만 1 ('YES')과 같지 않을 수도 있습니다. – kennytm

+0

그건 좀 지나치게 편집증적인 것처럼 보입니다. 메서드가 BOOL을 반환하도록 정의되고 BOOL이 아닌 다른 것을 반환하면 바로 그 부분에서 꽤 실패합니다. 나는 코코아가 실제로 그것을하지 않기를 바라고있다 ... –

답변

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(); 
} 
4

대신 테스트 배열을 유지하는 것이 어떻습니까? 이것이있는 NSArray보다는 C 배열을 사용

int testresult = 0; 
for(i = 0; i < 35; i++){ 
    if(test[i].hidden != YES){ 
     testresult = 1; 
     break; 
    } 
} 

if(testresult == 0){ 
    // all tests = yes 
} 

참고 :

그런 다음 당신은 단순히 뭔가를 할 수 있습니다. 원칙적으로 당신은 유사한 이름의 변수를 많이 가지고있는 배열을 이러한 배열로 바꿔야합니다. ObjC에서는 NSArray를 사용하는 것이 좋습니다 (이 답변의 주석에 따라). 내가 더 잘 될 것 인있는 NSArray에서 테스트 오브젝트를 저장하는 생각했지만

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 
} 

:

+0

그는 ObjC에서 프로그래밍 할 때 왜 C 배열을 사용 하겠는가? –

+0

@Colin은 ObjC에서 허용되지 않는 C 배열입니까? –

+1

허용되지만 NSArrays는 놓을 때 보유하고있는 객체의 정리를 처리합니다. – Eld

1

가 모두 동일한 수퍼에 포함 된 모든에? 그렇다면 이미 배열에 있다는 사실을 활용하여이 코드를 사용해보십시오.

관련 문제