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