我想在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中检查它将按预期工作。