在Objective-C的另一个视图中检查应用程序代表的切换状态



我想在Objective-C中的App Delegate中检查另一个UIView中开关的状态(是开还是关)。这是我的代码,但不起作用。我不知道我是否正确设置了 UIView 标头,我可以从应用程序委托访问视图。

- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions
{
    PrivacyPolicy *privacyPolicy = [[PrivacyPolicy alloc]init];
    if ([[privacyPolicy switchAuto] isOn])
    {
        //do something
    }
    else
    {
        nil;
    }

我找到了这段代码,但是在 Swift 3 中,任何人都可以翻译成 Objective-C 吗?我认为代码是我需要的。

if defaults.value(forKey: "switchON") != nil{
    let switchON: Bool = defaults.value(forKey: "switchON")  as! Bool
    if switchON == true{
        self.view.backgroundColor = UIColor.red()
    }
    else if switchON == false{
        self.view.backgroundColor = UIColor.green()
    }

我建议你在AppDelegate.h中添加一个BOOL属性:

@property (nonatomic) BOOL isPrivacyPolicyOn
并在 PrivacyPolicy

的 UISwitch 更改值时设置它(您首先必须将开关从接口生成器连接到 PrivacyPolicy 类):

- (IBAction)switchChanged:(id)sender {
    AppDelegate *delegate = (AppDelegate *)[[UIApplication sharedApplication] delegate];
    delegate.isPrivacyPolicyOn = [self.switchAuto isOn];
}

(记得在隐私策略中导入 AppDelegate.h)

这样,无论您在AppDelegate中使用哪种方法,您只需要检查其isPrivacyPolicyOn值,而不是访问视图的属性(这不是一个好主意):

if (self.isPrivacyPolicyOn) {
    /* do stuff */
}

另一种方法:使用 NSUserDefaults,以便保持完全不受约束的 AppDelegate 和 PrivacyPolicy(这总是一件好事)。

在隐私策略的开关 IBAction 中,您可以在用户默认值中设置一个值:

- (IBAction)switchChanged:(id)sender {
    NSNumber *switchValue = [NSNumber numberWithBool:[self.privacySwitch isOn]];
    NSUserDefaults *defaults = [NSUserDefaults standardUserDefaults];
    [defaults setObject:switchValue forKey:@"privacySwitch"];
}

在您的应用程序代表的任何方法中:

NSUserDefaults *defaults = [NSUserDefaults standardUserDefaults];
NSNumber *privacySwitchValue = [defaults objectForKey:@"privacySwitch"];
BOOL isPrivacyOn = [privacySwitchValue boolValue];

这样,用户设置的值将是非易失性的,您可以随时检查它。在这种情况下,在didFinishLaunchingWithOptions中检查它将按预期工作。

最新更新