Проверьте статус переключателя из приложения «Делегат» в другом представлении в Objective-C - PullRequest
0 голосов
/ 28 декабря 2018

Я хочу проверить состояние коммутатора (включен или выключен) в другом UIView из App Delegate в Objective-C.Это мой код, но он не работает.Я не знаю, правильно ли я настроил заголовок UIView, чтобы я мог добраться до View from App Delegate.

- (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()
    }

1 Ответ

0 голосов
/ 28 декабря 2018

Я предлагаю вам добавить свойство BOOL в AppDelegate.h:

@property (nonatomic) BOOL isPrivacyPolicyOn

и установить его при изменении значения UISwitch в PrivacyPolicy (сначала необходимо подключить переключатель из Interface Builder к классу PrivacyPolicy):

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

(Не забудьте импортировать AppDelegate.h в PrivacyPolicy)

Таким образом, в любом методе, который вы используете в AppDelegate, вам просто нужно проверить его значение isPrivacyPolicyOn, а не получить доступ кСвойство view (что не очень хорошая идея):

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

Другой подход: используйте NSUserDefaults, так что вы сохраняете полностью несвязанными AppDelegate и PrivacyPolicy (что всегда хорошо).

В IBAction переключателя PrivacyPolicy вы устанавливаете значение в userdefaults:

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

И в любом методе вашего AppDelegate:

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

Таким образом, значение устанавливаетсяпользователь будет энергонезависимым, и вы сможете проверить его в любое время.В этом случае проверка его в didFinishLaunchingWithOptions будет работать как положено.

...