UISwitch对价值变化采取行动 - iphone sdk

时间:2011-09-29 05:20:19

标签: iphone nsmutablearray uiswitch

我有一个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,如果我重新加载页面,我怎么能保持相同的状态呢?

请分享您的想法。 感谢

2 个答案:

答案 0 :(得分:5)

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

答案 1 :(得分:3)

看起来您遇到的问题是,当状态发生变化时会调用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:方法。