2010-06-21 2 views
1

x라는 BOOL 인스턴스 변수가있는 클래스 인스턴스 집합이 있습니다. 버튼을 클릭하면 메서드를 트리거 한 버튼과 관련된 인스턴스를 제외한 모든 인스턴스에 대해 x를 NO로 설정해야합니다. 종류가 라디오 버튼이 작동하는 것과 같습니다.어떤 버튼을 기반으로 인스턴스 변수 설정/재설정 UIButton 선택자 호출

변수에 대한 x의 모든 인스턴스를 NO로 설정하는 것은 쉽습니다. 예를 들어 cInstance.x를 YES로 설정하는 방법을 결정하는 데 도움이 필요합니다. myMethod는 많은 다른 버튼에 의해 사용되며 다른 인스턴스와 관련됩니다.

선택자가 호출하는 세 가지 별도의 메소드를 사용하여 작성할 수 있지만 잘못된 프로그래밍은 소리를 지르지 않습니다.

[myButtonA addTarget:self action:@selector(myMethodA:) forControlEvents:UIControlEventTouchUpInside]; 
[myButtonB addTarget:self action:@selector(myMethodB:) forControlEvents:UIControlEventTouchUpInside]; 
[myButtonC addTarget:self action:@selector(myMethodC:) forControlEvents:UIControlEventTouchUpInside]; 


    - (void)myMethodA:(id)sender { 
    NSArray *objects = [NSArray arrayWithObjects:aInstance, bInstance, cInstance, dInstance, eInstance, nil]; 
    int i = [objects count]; 
    while (i--) { 
     MyClass *selectedInstance = [objects objectAtIndex:i]; 
     selectedInstance.x = NO; 
    } 
    aInstance.x = YES; 
    } 

    - (void)myMethodB:(id)sender { 
    NSArray *objects = [NSArray arrayWithObjects:aInstance, bInstance, cInstance, dInstance, eInstance, nil]; 
    int i = [objects count]; 
    while (i--) { 
     MyClass *selectedInstance = [objects objectAtIndex:i]; 
     selectedInstance.x = NO; 
    } 
    bInstance.x = YES; 
    } 

    - (void)myMethodC:(id)sender { 
    NSArray *objects = [NSArray arrayWithObjects:aInstance, bInstance, cInstance, dInstance, eInstance, nil]; 
    int i = [objects count]; 
    while (i--) { 
     MyClass *selectedInstance = [objects objectAtIndex:i]; 
     selectedInstance.x = NO; 
    } 
    cInstance.x = YES; 
    } 

지금 내가 NO 모든 X 변수를 재설정 할 수있는 새로운 방법을 만들 수 있다고 가정하고 하나 개의 방법은 총을 필요로한다 일의 YES 그러나 이런 종류의에 특정 변수를 설정 각각의 버튼에 대해 별도의 방법을 .

답변

2

음, 모든 인스턴스에 대한 포인터와 배열이 있다고 가정하자 x 속성이 그 (?있는 UIButton의 서브 클래스가 MyClass에 있습니다 내가 여기에 있으리라 믿고있어) : 이제

NSArray* myButtons = [[NSArray alloc] initWithObjects:button1, button2, ..., nil]; 

을 이제 가정하자 이 buttonPressed 메소드를 호출하도록 설정된 모든 버튼에 대한 모든 TouchUpInside 이벤트가 있습니다. 이 루프는 모든 버튼을 통해 이동하고 단지 누른 사람 (발신자)을 제외하고 NO로 모두를 설정

-(void) buttonPressed:(id)sender 
{ 
    for (MyClass* button in myButtons) { 
     button.x = (button == sender); 
    } 
} 

모든 버튼의 X 속성 (하나 누를) 보낸 사람을 제외하고 NO로 설정 .

관련 문제