Установить / Сбросить переменные экземпляра в зависимости от того, какая кнопка вызова селектора UIButton - PullRequest
1 голос
/ 21 июня 2010

У меня есть набор экземпляров классов, которые имеют переменную экземпляра BOOL с именем x.Когда кнопка нажата, мне нужно, чтобы для 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 Ответ

2 голосов
/ 21 июня 2010

Хорошо, допустим, у вас есть массив с указателями на все ваши экземпляры (MyClass - это подкласс UIButton? Я предполагаю, что здесь) со свойством x:

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

Теперь давайтеПредположим, у вас есть все события TouchUpInside для всех этих кнопок, настроенных для вызова этого метода buttonPressed.Этот цикл проходит по всем кнопкам и устанавливает для всех значение NO, за исключением только что нажатой (отправитель):

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

Все свойства x кнопки имеют значение NO, кроме отправителя (тот, которыйнажат).

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...