2014-01-23 4 views
-3

for 루프를 사용하여 9 개의 단추를 만들고 있는데, 한 번에 모든 단추에 액세스하기 때문에 배열에 단추를 저장하고 싶습니다.배열에 단추를 저장하고 싶습니다.

for(i = 0; i < 9; i++) 
{ 
    num1 = [UIButton buttonWithType:UIButtonTypeCustom]; 
    [num1 setExclusiveTouch:YES]; 
    [num1 setTag:tag_start+i]; 
    num1.tag = currentTag; 
    currentTag++; 
    [num1 setTitle:[NSString stringWithFormat:@"%d",currentTag] forState:UIControlStateNormal]; 
    [num1 setTitleColor:[UIColor whiteColor] forState:UIControlStateSelected]; 
    [num1 setTitleColor:[UIColor blackColor] forState:UIControlStateNormal]; 
    [num1.titleLabel setFont:[UIFont fontWithName:@"Helvetica-Bold" size:35.0]]; 

    //Store the button in array 
    [numBtnArray addObject:num1]; 

    NSLog(@"%d", numBtnArray.count); //it show 0 nothing in that array 

    if(i >= 5) { 
     num1.frame = CGRectMake(430, i*60-160, 50, 50); 
    } 
    else { 
     num1.frame = CGRectMake(350, i*60+140, 50, 50); 
    } 
    [num1 addTarget:self action:@selector(buttonFunction:) forControlEvents:UIControlEventTouchUpInside]; 
    [num1 setBackgroundImage:[UIImage imageNamed:@"greyBtn.png"] forState:UIControlStateNormal]; 
    [num1 setBackgroundImage:[UIImage imageNamed:@"greyBtn.png"] forState:UIControlStateHighlighted]; 
    [self.view addSubview:num1]; 
} 
+1

액세스 한 번에 모든 버튼 ?? 이게 무슨 뜻이야 ?? –

+2

이미 버튼을 배열 (numBtnArray)에 추가하고있는 것 같습니다. 당신의 질문은 정확히 무엇입니까? –

+0

즉, 배열을 사용하여 코드 한 줄에있는 모든 9 개의 버튼의 색상을 변경하는 경우 – user3069029

답변

0

내가 요구 사항이 무엇인지 이해하지만 당신은 배열에 저장해야하는 경우

numBtnArray = [[NSMutableArray alloc] init]; 
for(i = 0; i < 9; i++) { 

     UIButton *num1 = [UIButton buttonWithType:UIButtonTypeCustom]; 
     //... 

     //Store the button in array 
     [numBtnArray addObject:num1]; 

     NSLog(@"%d", numBtnArray.count);  

     //... 
} 
+0

코드와 OP의 차이점은 무엇입니까? – trojanfoe

+0

NSArray * btnArray = [NSArray new]; 첫 줄에 추가됩니다. – avuthless

+1

두 번 추가 중입니다. 또한 의미가 없습니다. –

0

변경에게 코드를하지 않는다 원하는대로 정확히 수행 할 수 있지만, 배열에 버튼을 저장하지 않는 것이 좋습니다. UIView은 이미 그렇게합니다.

당신은 당신이 할 수있는 버튼에 대량 변화의 일종을 수행하려면

, 다음 중 하나를

  1. 당신이 최소 (나중에 식별 할 수 있도록 버튼의 태그 값을 설정하거나 최대 범위).
  2. 클래스를 테스트하여 버튼을 타겟팅하십시오.

그래서, 당신은 self.view의 버튼의 배경색을 변경하려는 경우, 단순히 :

for (id obj in self.view.subviews) { 
    if (![obj isKindOfClass:[UIButton class]]) 
     continue; 
    UIButton *button = (UIButton *)obj; 
    button.backgroundColor = [UIColor blueColor]; 
} 
+0

NSMutableArray에만 'addObject'가 가능하고 num1은 지역 변수 여야합니다. – Vaisakh

0

을 다음과 그것은 분명하지 않다 단순히

NSMutableArray *btnArray = [NSMutableArray new]; 
    for(i = 0; i < 9; i++) 
    { 
     // ... 
     [btnArray addOjnect:num1]; 
     [self.view addSubview:num1]; 
    } 
+2

당신이 말하는 것을 볼 수는 있지만 다른 유형의 버튼을 다른 곳에 추가하는 것일 수 있습니다. 배열에서 그 버튼을 누르고 있으면 가독성을 높일 수있는 경우가 있습니다. –

+0

@nickfalk 그 사실을 생각합니다. 관리해야하는 각 버튼에 대한 두 개의 참조입니다 (버튼을 제거하면 어떤 일이 발생할지 생각해보십시오). – trojanfoe

+0

이것이 기본 방법은 아니지만, 예를 들어 스프라이트 기반 게임에서 패턴 제거를 위해 어레이에 추가 된 스프라이트를 다음보기 사이클에서 비우는 것이 일반적입니다. –

관련 문제