2010-06-21 52 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; 
    } 

現在,我想我可以創建重置所有變量x爲NO的新方法,然後對每個設置一個特定的變量爲YES但是這種事情按鈕一個單獨的方法應該只需要一個方法總。

回答

2

好吧,假設你有一個指向所有實例的數組(?是MyClass的UIButton的子類我假設在這裏)有x屬性:

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

現在,讓我們假設您已將所有這些按鈕的TouchUpInside事件都設置爲調用此buttonPressed方法。這個循環會突破所有的按鈕和設置都沒有任何除了剛按下一個(發件人):

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

所有按鈕的X屬性設置爲NO,除了發送者(一壓) 。