如何以编程方式切换uiswitch按钮

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了如何以编程方式切换uiswitch按钮相关的知识,希望对你有一定的参考价值。

我以编程方式在tableViewController第3行添加了一个uiswitch。它正在正确显示,我正在NSUserDefaults中保存交换机的状态。我也在比较,取决于NSUserDefaults值和字符串值我试图将我的开关状态改为(ON或OFF)但问题是开关的状态没有改变。

这是我的代码:

- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath {

    static NSString *CellIdentifier = @"Cell";

    UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:CellIdentifier];
    if (cell == nil) {
        cell = [[[UITableViewCell alloc] initWithStyle:UITableViewCellStyleDefault reuseIdentifier:CellIdentifier] autorelease];
    }

    switch (indexPath.row) {

        case 2:
            cell.textLabel.text = @"Weather";   
            switchControl = [[UISwitch alloc] initWithFrame:CGRectZero];
            cell.accessoryView = switchControl;

            [self.switchControl setOn:YES animated:NO];
            [self.switchControl addTarget:self action:@selector(switchChanged:) forControlEvents:UIControlEventValueChanged];
            [switchControl release];
            break;


        default:
            break;
    }
    cell.textLabel.text = [settings objectAtIndex:indexPath.row];
    cell.accessoryType = UITableViewCellAccessoryDisclosureIndicator;



    return cell;
}



-(void)switchChanged:(id)sender
{

    app= (StopSnoozeAppDelegate*)[[UIApplication sharedApplication]delegate];

        NSString *value;
    userdefaults = [NSUserDefaults standardUserDefaults];
        if(!switchControl.on){
            value = @"OFF";
            [userdefaults setObject:value forKey:@"stateOfSwitch"];
        }
        [userdefaults setObject:value forKey:@"stateOfSwitch"];
    [userdefaults synchronize];

}


- (void)viewWillAppear:(BOOL)animated {
    NSString *_value= [[NSUserDefaults standardUserDefaults] stringForKey:@"stateOfSwitch"];

    if([_value compare:@"ON"] == NSOrderedSame){
        [self.switchControl setEnabled:YES];
    }
    else {
        [self.switchControl setEnabled:NO];
    }
    [super viewWillAppear:animated];
}

在视图中WillAppear我将字符串与我的NSUserDefaults值进行比较并尝试更改切换状态。它正确地进入断点,但不会将开关状态从ON更改为OFF。

答案

您可以关闭UISwitch设置

[yourSwitch setOn:NO animated:YES]; 

并打开设置

[yourSwitch setOn:YES animated:YES];
另一答案

这没有任何意义:

switchControl = [[UISwitch alloc] initWithFrame:CGRectZero];
cell.accessoryView = switchControl;

[self.switchControl setOn:YES animated:NO];
[self.switchControl addTarget:self action:@selector(switchChanged:) forControlEvents:UIControlEventValueChanged];
[switchControl release];

你创建一个开关,做一些东西,可能是另一个开关,然后释放第一个。试试这个:

self.switchControl = [[UISwitch alloc] initWithFrame:CGRectZero];
cell.accessoryView = switchControl;

[self.switchControl setOn:YES animated:NO];
[self.switchControl addTarget:self action:@selector(switchChanged:) forControlEvents:UIControlEventValueChanged];
另一答案

尝试在cellForRowAtIndexPath而不是viewWillAppear中编写以下代码:

NSString *_value= [[NSUserDefaults standardUserDefaults] stringForKey:@"stateOfSwitch"];

if([_value compare:@"ON"] == NSOrderedSame) {
    [self.switchControl setEnabled:YES];
} else {
    [self.switchControl setEnabled:NO];
}
另一答案

你可以通过设置简单地切换ON

switchOutlet.on = YES;

并使它成为OFF

switchOutlet.on = NO;

以上是关于如何以编程方式切换uiswitch按钮的主要内容,如果未能解决你的问题,请参考以下文章

以编程方式将按钮添加到片段

以编程方式切换片段

以编程方式访问 UISwitch 大小而不添加组件

从 IBAction 以编程方式设置 UISwitch isOn 再次调用 IBAction

如何在android中以编程方式在片段之间导航?

是否可以在 iPhone Setting Bundle 中以编程方式添加 UISwitch?