根据UIButton选择器调用的按钮设置/重置实例变量

时间:2010-06-21 04:54:31

标签: objective-c

我有一组类实例,它们有一个名为x的BOOL实例变量。单击一个按钮时,除了与触发该方法的按钮相关的实例外,我需要将x设置为NO。有点像单选按钮的工作原理。

将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,但是这种事情应该只需要一个方法总数。

1 个答案:

答案 0 :(得分:2)

好吧,假设您有一个数组,其中包含指向所有实例的指针(MyClass是UIButton的子类吗?我假设在这里)具有x属性:

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

现在,让我们假设您拥有所有设置为调用此buttonPressed方法的按钮的所有TouchUpInside事件。这个循环遍历所有按钮并将all设置为NO,除了刚刚按下的那个(发送者):

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

除发件人(按下的人)外,所有按钮的x属性都设置为NO。