Как определить, включен ли UISwitch? - PullRequest
17 голосов
/ 28 мая 2011

Я пытаюсь определить, когда UIS включает / выключает его

// .h
IBOutlet UISwitch *privateSwitch;
@property (nonatomic, retain) IBOutlet UISwitch *privateSwitch;

//.m
@synthesize privateSwitch;
privateSwitch = [[UISwitch alloc] init];
howToDisplay = @"no";

// In my cellForRowsAtIndexPath
UISwitch *privateSwitch = [[UISwitch alloc] initWithFrame:CGRectMake(199, 8, 0, 0)];
[privateSwitch addTarget:self action:@selector(switchToggled:) forControlEvents: UIControlEventTouchUpInside];
[cell.contentView addSubview:privateSwitch];

if ([howToDisplay isEqualToString:@"no"]) {
    [privateSwitch setOn:NO animated:NO];
} else {
    [privateSwitch setOn:YES animated:NO];
}

- (void) switchToggled:(id)sender {

if ([privateSwitch isOn]) {
NSLog(@"its on!");
howToDisplay = @"yes";
[formDataTwo removeAllObjects];
[formTableView reloadData];
[privateSwitch setOn:YES animated:YES];
} else {
NSLog(@"its off!");
howToDisplay = @"no";
[formDataTwo removeAllObjects];
[formDataTwo addObject:@"Facebook"];
[formDataTwo addObject:@"Twitter"];
[formDataTwo addObject:@"Flickr"];
[formDataTwo addObject:@"Tumblr"];
[formDataTwo addObject:@"Email"];
[formDataTwo addObject:@"MMS"];

[formTableView reloadData];
[privateSwitch setOn:NO animated:YES];
}

}

Однако, когда я включаю его, он говорит, что он выключен.Что дает?

Спасибо.

1 Ответ

54 голосов
/ 28 мая 2011

В вашем методе cellForRowsAtIndexPath вы объявляете локальную переменную UISwitch *privateSwitch, которая скрывает переменную вашего экземпляра privateSwitch.

В вашем действии switchToggled: вы используете переменную экземпляра для проверки состояния коммутатора, а не того, который объявлен в cellForRowAtIndexPath. Вы можете использовать параметр sender следующим образом:

- (void) switchToggled:(id)sender {
    UISwitch *mySwitch = (UISwitch *)sender;
    if ([mySwitch isOn]) {
        NSLog(@"its on!");
    } else {
        NSLog(@"its off!");
    }
}

P.S .: Я бы использовал UIControlEventValueChanged вместо UIControlEventTouchUpInside.

...