NSUserDefaults を使用して iPhone アプリ用のカスタム UISwitch を作成し、Pincode をセットアップするためのモーダル ビュー コントローラー (PincodeSetupViewController) を追加しました。ユーザーに表示される情報は次のとおりです。
ユーザーがアプリをクリックして初めて mainViewController を起動すると、ユーザーが Pincode をセットアップしていないため、UISwitch が既に OFF に設定されていることが示されます。それは正しいです。
次のステップは、ユーザーがスイッチをオンにすることを決定したときで、モーダル ビュー コントローラー (PincodeSetupViewController) をすぐに表示する必要があります。下から上にスライドします。それは正しいです。
ここで、ユーザーはアプリを閉じて、もう一度開きます。ユーザーが Pincode を設定するためにこれを行ったため、スイッチは既に ON に設定されています。それは正しいです。
ユーザーは、スイッチをオフにしてオンに戻すことにしました。スイッチを再度オンにすると、すぐにモーダル ビュー コントローラー (PincodeSetupViewController) が表示されます。ここでの問題は、モーダル ビュー コントローラーがスライドを下から上に遷移せず、突然表示されることです。これは正しくありません。そのモーダル ビュー コントローラーで、スライドを突然ではなく、下から上に遷移させたいと考えています。
何が悪いのか誰か知っていますか?任意の提案をいただければ幸いです。
mainViewController.m:
- (void)viewDidLoad
{
[super viewDidLoad];
customSwitch = [[RCSwitchOnOff alloc] initWithFrame:CGRectMake(1.0, 0.0, 74, 40)];
[customSwitchView addSubview:customSwitch];
[customSwitch addTarget:self action:@selector(togglePincode:) forControlEvents:UIControlEventValueChanged];
}
- (void)viewDidAppear:(BOOL)animated
{
[super viewDidAppear:animated];
if ([[NSUserDefaults standardUserDefaults] boolForKey:@"pincode"]) {
NSLog(@"SWITCH MESSAGE: ON");
[customSwitch setOn:YES];
} else {
NSLog(@"SWITCH MESSAGE: OFF");
[customSwitch setOn:NO];
}
}
- (void)togglePincode:(UISwitch *)sender {
if(sender.on){
NSLog(@"Switch is ON");
NSUserDefaults *userDefaults = [NSUserDefaults standardUserDefaults];
[userDefaults setBool:YES forKey:@"pincode"];
[userDefaults synchronize];
//Check to see if the user already setup the Pincode or not.
if ([[NSUserDefaults standardUserDefaults] boolForKey:@"setupdone_status"]) {
NSLog(@"Display Pincode Setup");
[[NSUserDefaults standardUserDefaults] setBool:NO forKey:@"setupdone_status"];
UIStoryboard *storyboard = [UIStoryboard storyboardWithName:@"MainStoryboard" bundle:nil];
UIViewController *vc = [storyboard instantiateViewControllerWithIdentifier:@"PincodeSetupViewController"];
[vc setModalPresentationStyle:UIModalPresentationFullScreen];
[self presentModalViewController:vc animated:YES];
} else {
NSLog(@"No Pincode Setup");
}
} else {
NSLog(@"Switch is OFF");
NSUserDefaults *userDefaults = [NSUserDefaults standardUserDefaults];
[userDefaults setBool:NO forKey:@"pincode"];
[userDefaults setBool:YES forKey:@"setupdone_status"];
[userDefaults synchronize];
}
}
AppDelegate.m applicationDidEnterBackground および applicationWillTerminate メソッドにコードを追加しました
if ([[NSUserDefaults standardUserDefaults] boolForKey:@"pincode"]) {
[[NSUserDefaults standardUserDefaults] setBool:NO forKey:@"setupdone_status"];
} else {
[[NSUserDefaults standardUserDefaults] setBool:YES forKey:@"setupdone_status"];
}