UISwitch выполняет действие по изменению значения-iphone sdk - PullRequest
1 голос
/ 29 сентября 2011

У меня есть UISwitch, и мне нужно загрузить значение в строке в массив при изменении состояния переключателя с OFF на ON. Я использовал следующий код, но не работает.

-(IBAction)toggleSwitch1:(id)sender {
    if (addSwitch.on) {
        [addSwitch addTarget:self action:@selector(addName:) forControlEvents:UIControlEventValueChanged];
        NSLog(@"%@",userName);
    }else {
        NSLog(@"No");
    }
}

-(void)addName:(UIControl*)sender {
    [alertList addObject:userName];
    NSLog(@"AlertList: %@", alertList);
}

И если после того, как состояние изменилось на ВКЛ, как я могу остаться в том же состоянии, если я перезагрузить страницу?

Пожалуйста, поделитесь своими мыслями. Спасибо

Ответы [ 2 ]

5 голосов
/ 29 сентября 2011

В viewDidLoad используйте это:

-(void)viewDidLoad 
{
    [super viewDidLoad];    
    NSUserDefaults *userdefault=[NSUserDefaults standardUserDefaults];
    if([userdefault boolForKey:@"yes"]) {
        addSwitch.on=YES;
    } else {
        addSwitch.on=NO;
    }
}

-(IBAction)toggleSwitch1:(id)sender 
{
    NSUserDefaults *userdefault=[NSUserDefaults standardUserDefaults];
    if (addSwitch.on) {
        [self performSelector:@selector(addName:) withObject:userName];
        NSLog(@"%@",userName);
        [userdefault setBool:YES forKey:@"yes"];
    } else {
        [userdefault setBool:NO forKey:@"no"];
        NSLog(@"No");
    }
}

-(void)addName:(UIControl*)sender 
{
    [alertList addObject:sender];
    NSLog(@"AlertList: %@", alertList);
}
3 голосов
/ 29 сентября 2011

Похоже, проблема в том, что метод toggleSwitch вызывается при изменении состояния, а затем начинает прослушивание изменений с помощью метода addTarget :. Вы должны выбрать один или другой для обработки изменений.

-(IBAction)toggleSwitch1:(id)sender{
    if (addSwitch.on) {
        [self addName:userName];
    } else {
        //do something else
    }
}

-(void)addName:(UIControl*)sender{
    [alertList addObject:userName];
}

Чтобы сохранить состояние переключателя, просто используйте другую переменную, которая хранит состояние переключателя, и вызовите метод setOn: animated: в viewDidLoad.

...