UISwitch在value change上执行动作-iphone sdk



我有一个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);
}

如果一旦状态更改为ON,如果我重新加载页面,我如何保持相同的状态?

请分享你的想法。由于

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);
}

看起来您遇到的问题是toggleSwitch方法在状态更改时被调用,然后它开始使用addTarget:方法侦听更改。您应该选择其中一个来处理更改。

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

要保存开关状态,只需使用另一个变量来存储开关状态,并调用viewDidLoad中的setOn:animated:方法。

最新更新