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

У меня есть ряд экземпляров класса, которые имеют переменную экземпляра BOOL, названную x. Когда кнопка нажата, мне нужен x, который будет установлен на НЕ для всех экземпляров кроме экземпляра, связанного с кнопкой, которая инициировала метод. Отчасти как то, как работает переключатель.

Легко установить все экземпляры x к переменным к НЕТ. Я нуждаюсь в помощи, определяя, как установить, например, cInstance.x к ДА. 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 переменных к нет, затем иметь отдельный метод для каждой кнопки, которая устанавливает определенную переменную на ДА однако, такого рода вещь должна только потребовать одного общего количества метода.

1
задан Timbo 21 June 2010 в 04:54
поделиться

1 ответ

Что ж, допустим, у вас есть массив с указателями на все ваши экземпляры (является ли 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, за исключением отправителя (того, который был нажат).

2
ответ дан 2 September 2019 в 23:38
поделиться
Другие вопросы по тегам:

Похожие вопросы: