在解雇UIPopover时,UISwitch不会保持OFF状态

时间:2012-05-04 16:27:09

标签: xcode uipopovercontroller uiswitch uipopover

我在UIPopoverController中有一个UISwitch,当你打开popover VC时它的默认设置为ON。我试图让它当你将它设置为“OFF”并关闭UIPopover时 - 当你重新打开popover时,UISwitch的状态保持不变。对于我的生活,我无法弄清楚这一点,我敢打赌这是非常简单的事情。我想知道是否有人能指出我正确的方向?任何帮助将非常感谢谢谢!

[编辑] 这是我正在使用的代码:

  //--NEW CODE--//
#define SWITCH_KEY_STATE @"Save UISwitch State"

- (IBAction)settingsPopover:(id)sender {
    if(![pop isPopoverVisible]){
        settings = [[settingsView alloc] initWithNibName:@"settingsView" bundle:nil];
        settings.setDelegate = self;
        pop = [[UIPopoverController alloc] initWithContentViewController:settings];
        [pop setPopoverContentSize:CGSizeMake(200, 100)];
        [pop presentPopoverFromBarButtonItem:sender permittedArrowDirections:UIPopoverArrowDirectionAny animated:YES];
        //--NEW CODE--//
        popoverState = [NSUserDefaults standardUserDefaults];
        self.settings.hintSwitch.on = [popoverState boolForKey:SWITCH_KEY_STATE];

        [self.settings.hintSwitch addTarget:self action:@selector(onOff:) forControlEvents:UIControlEventValueChanged];
    } else {
        [pop dismissPopoverAnimated:YES];
    }
}

这是创建弹出窗口的函数[self.settings.hintSwitch...是在UISwitch上调用的弹出窗口(设置),当它与它交互时运行此void函数:

- (void)onOff:(id)sender {
    if (settings.hintSwitch.on) {
        tutView.hidden = NO;
    } else {
        tutView.hidden = YES;
    //--NEW CODE--//
    popoverState = [NSUserDefaults standardUserDefaults];
    [popoverState setBool:self.settings.hintSwitch.on forKey:SWITCH_KEY_STATE];
        }
    }

因此,当我关闭弹出窗口并重新打开它时,它会找到它,它会将UISwitch重置为“ON”。

[EDIT2] 我已将上面的代码编辑为我添加的内容。哪个有效!

1 个答案:

答案 0 :(得分:1)

我看到的第一件事就是这行代码:

pop = [[UIPopoverController alloc] initWithContentViewController:settings];

有了它,你每次控制器都会重新分配,用初始设置初始化它(默认为ON)。

你有这个解决方案:

  1. 在您的类中创建一个名为“popoverState”
  2. 的BOOL
  3. 在解除popovercontroller之前保存UISwitch的状态
  4. 一旦启动它,您就可以使用新变量来设置开关的状态
  5. 现在就让我吧!