【问题标题】:I want a UIswitch to stay on whatever the user changes it to我希望 UIswitch 保持在用户将其更改为的任何位置
【发布时间】:2014-08-23 18:45:17
【问题描述】:

我的UIswitch 用于关闭我的应用程序中的声音。我的问题是,如果用户将其关闭,我的开关将不会关闭。开关在另一个视图控制器中,但在同一个文件中。当用户选择它时,如何使开关保持关闭状态。

-(void)None{

    [player stop];
    [player1 stop];
    Volume.on=NO;

}

(IBAction)Volumeswitch:(id)sender {

    if(Volume.on){

        Label.text = @"On";

        Sounds=YES;

    }
    else{

        Label.text = @"Off";

        Sounds=NO;

        SoundTimer = [NSTimer scheduledTimerWithTimeInterval:0.0001 target:self selector:@selector(None) userInfo:nil repeats:YES];
    }

}

【问题讨论】:

  • 保存它的状态 before 并且视图控制器被释放并恢复回来 after 视图控制器被再次加载。这就是如何“记住”任何数据的过程。
  • 我不明白你想说什么
  • 在这种情况下,您可能需要了解有关如何永久存储任何数据的基本知识。 :)

标签: ios objective-c xcode uiswitch


【解决方案1】:

就像 Gutblender 所说,专注于逻辑,如果您不想使用全局变量,可以使用 NSUserDefaults 来存储“开关”的值。

例如,每当开关设置为开时

NSUserDefaults *pref = [NSUserDefaults standardUserDefaults];
[pref setBool:YES forKey:@"sound_on"];
[pref synchronize];

在你的 viewDidAppear 中:

NSUserDefaults *pref = [NSUserDefaults standardUserDefaults];
BOOL switchOn = [pref boolForKey:@"sound_on"];

[self.yourSwitch setOn:switchOn animated:NO];

【讨论】:

    【解决方案2】:

    我建议在播放声音的任何类或某些集中的“系统配置”类中保留一个可能是全局的或公共的 BOOL。让 BOOL 成为“我是否播放声音?”的实际决定,而不是 UISwitch

    然后,只需使用BOOL 的值初始化UISwitch,并在用户更改UISwitch 时更改BOOL 的值。

    【讨论】:

    • 我试过了,还是不行。我的代码将在问题上提出
    • 还有一个问题,当我离开视图控制器时,开关不会保持关闭状态
    • 你读过我的回答吗?你不应该太担心开关的状态,而应该担心实际的逻辑。您可以在UIViewControllerviewDidAppear 中更新UISwitch
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2015-12-23
    • 2023-03-15
    • 2012-10-22
    • 2019-12-30
    • 2012-06-02
    • 2015-04-17
    • 1970-01-01
    相关资源
    最近更新 更多