0

我在 UIPopoverController 中有一个 UISwitch,当你打开 popover VC 时,它的默认设置是 ON。我试图拥有它,以便当您将其设置为“关闭”并关闭 UIPopover 时 - 当您重新打开弹出窗口时,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]我已经将上面的代码编辑为我添加的内容。哪个有效!

4

1 回答 1

1

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

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

有了它,您每次控制器时都会重新分配,并使用初始设置对其进行初始化(默认为 ON)。

你有这个解决方案:

  1. 在你的类中创建一个名为“popoverState”的 BOOL
  2. 在关闭 popovercontroller 之前保存 UISwitch 的状态
  3. 一旦你初始化它,你可以使用新变量来设置开关的状态

让我知道!

于 2012-05-07T07:36:47.783 回答