2012-03-23 5 views
-2

보기 많은 섹션 (단추 그룹)보기의 각 섹션에 고유 한 ID가 들어있는보기가 있습니다. NSMutableArray에 ID에 따라 단추를 추가하려고합니다. 즉 사용자가 단추를 클릭하면 단추 ID를 얻습니다. 배열에 모든 버튼에 id가 있음) 내가이 코드를 썼지 만, 추가 한 후 배열의 길이를 확인하면 0으로 나타납니다 !! 힌트 : sec_0, sec_1, sec_2, sec_3, sec_4, sec_5, sec_6, sec_7, sec_8은 미리 정의 된 NSMUtable 배열입니다.objective-C의 태그 번호에 따라 MutableArray에 버튼을 추가하는 방법은 무엇입니까?

-(NSMutableArray*)findButtonsSection:(UIButton *)buton{ 

NSLog(@"Inside findButtonsSection"); 
int tag_No=buton.tag; 
for (UIButton* bton in self.view.subviews) { 
    NSLog(@"Inside findButtonsSection2"); 
    switch (tag_No) { 
     case 0: 
       [sec_0 addObject:bton]; 
      NSLog(@"Number of buttons in array=%i",[sec_0 count]); 

      break; 
     case 1: 
      NSLog(@"Button tag No=%i",buton.tag); 

      [sec_1 addObject:bton]; 
      return sec_1; 
      break; 
     case 2: 
      NSLog(@"Button tag No=%i",buton.tag); 

      [sec_2 addObject:bton]; 
      return sec_2; 
      break; 
     case 3: 
      NSLog(@"Button tag No=%i",buton.tag); 

      [sec_3 addObject:bton]; 
      return sec_3; 
      break; 
     case 4: 
      NSLog(@"Button tag No=%i",buton.tag); 

      [sec_4 addObject:bton]; 
      return sec_4; 
      break; 
     case 5: 
      NSLog(@"Button tag No=%i",buton.tag); 

      [sec_5 addObject:bton]; 
      return sec_5; 
      break; 
     case 6: 
      NSLog(@"Button tag No=%i",buton.tag); 

      [sec_6 addObject:buton]; 
      return sec_6; 
      break; 
     case 7: 
      NSLog(@"Button tag No=%i",buton.tag); 

      [sec_7 addObject:bton]; 
      return sec_7; 
      break; 
     case 8: 
      NSLog(@"Button tag No=%i",buton.tag); 

      [sec_8 addObject:bton]; 
      return sec_8; 
      break; 
     default: 
      NSLog(@"nnnnnnnnnn");    
    } 

} 

} 
+0

"추가 한 후 배열의 길이를 확인하면 0 인 것으로 나타났습니다."어떤 배열을 검사 했습니까? sec_0이 아닌 배열에 항목을 하나 추가하면 코드가 반환됩니다. – ColdLogic

+0

그것은 모든 버튼을 추가하기 위해 할 수있는 일은 하나의 항목을 추가하는 대신 지정된 id를 가진 것 같습니다. –

+1

스위치에서'return sec_ # '부분을 제거하십시오. 업데이트 된 코드로 내 대답을 확인하십시오. – ColdLogic

답변

1

배열이 모두 비어있는 이유는 sec_0이 아닌 배열에 값을 추가 한 후에 반환하기 때문입니다. 당신은 for 루프에서 빠져 나올 것이기 때문에 그러한 리턴을 원하지 않습니다. 아래 코드를 시도하십시오.

일부 코드 줄을 저장하고 읽기 쉽도록 배열을 전환 할 수도 있습니다.

-(NSMutableArray *)findButtonSelections:(UIButton *)button { 
    NSArray *array = [NSArray arrayWithObjects:sec_0, sec_1, sec_2, sec_3, sec_4, sec_5, sec_6, sec_7, sec_8, nil]; 

    int tag = button.tag; 

    //BTW, this function will return all views, not just buttons 
    for (UIButton* bton in self.view.subviews) { 
     //So add this to make sure the view is a button 
     if([bton isKindOfClass:[UIButton class]]) { 

       [[array objectAtIndex:tag] addObject:bton]; 
     } 
    } 

    return [array objectAtIndex:tag]; 
} 

스위치 코드를 유지하려면 다음을 시도하십시오.하지만 권장하지 않습니다.

-(NSMutableArray *)findButtonSelections:(UIButton *)button { 

    NSLog(@"Inside findButtonsSection"); 

    int tag_No=buton.tag; 
    for (UIButton* bton in self.view.subviews) { 

     NSLog(@"Inside findButtonsSection2"); 
     switch (tag_No) { 
      case 0: 
       [sec_0 addObject:bton]; 
       NSLog(@"Number of buttons in array=%i",[sec_0 count]); 

       break; 
      case 1: 
       NSLog(@"Button tag No=%i",buton.tag); 

       [sec_1 addObject:bton]; 
       break; 
      case 2: 
       NSLog(@"Button tag No=%i",buton.tag); 

       [sec_2 addObject:bton]; 
       break; 
      case 3: 
       NSLog(@"Button tag No=%i",buton.tag); 

       [sec_3 addObject:bton]; 
       break; 
      case 4: 
       NSLog(@"Button tag No=%i",buton.tag); 

       [sec_4 addObject:bton]; 
       break; 
      case 5: 
       NSLog(@"Button tag No=%i",buton.tag); 

       [sec_5 addObject:bton]; 
       break; 
      case 6: 
       NSLog(@"Button tag No=%i",buton.tag); 

       [sec_6 addObject:buton]; 
       break; 
      case 7: 
       NSLog(@"Button tag No=%i",buton.tag); 

       [sec_7 addObject:bton]; 
       break; 
      case 8: 
       NSLog(@"Button tag No=%i",buton.tag); 

       [sec_8 addObject:bton]; 
       break; 
      default: 
       NSLog(@"nnnnnnnnnn");    
     } 

    } 

    return [array objectAtIndex:tag]; 
} 
+0

"버튼 매개 변수를 제거"버튼을 눌렀을 때의 태그 번호를 확인하는 방법! –

+0

질문을 편집하기 전에 질문을 편집하여 원래 질문을 다시 읽은 후에 다시 입력해야합니다. P – ColdLogic

+0

버튼 매개 변수를 제거하면 버튼을 기준으로 모든 배열을 채울 수 있습니다. 각 버튼의 태그 대신 1 개의 배열을 채우는 것 – ColdLogic

2

구조가 구축 된 후 해당 sec_x 변경 가능 배열에서 C 배열을 형성하십시오. 이 같은

NSMutableArray *secs[] = {sec_0, sec_1....}; 

나서 스위치 대신 인덱싱 사용이 경우 나타내고 어레이 요소의 액세스에

[secs[tag_No] addObject:bton]; 

대괄호 아닌 목표 C 메소드 호출.

보다 일반적인 메모에서 일반 오래된 C를 읽어보십시오. Objective C/iOS 자습서에서는 철자없이 사용자가 C 배경을 가지고 있다고 가정하고 C보다는 Objective C 객체 시스템을 설명하기 시작합니다 비트.

+0

'NSMutableArray *'를 의미하지 않습니까? 'NSMutableArray'는 불완전한 타입입니다. –

+0

오른쪽. 편집 됨 .. –

관련 문제