如何在整个时间 iOS 应用程序 运行 中隐藏按钮、标签等,然后在开始时再次显示它们?
How to hide buttons, labels, etc for entire time iOS app is running, then show them again at start?
我正在 Objective C 中编写 iOS 应用程序。我希望条款和条件在用户打开应用程序时出现。我将有一个 "don't show these again" 按钮,这都是使用 NSUserDefaults 计算出来的。我想不通的是,如果用户点击 "agree"(termsPressed)而不是 "don't show these again"(neverAgainPressed),如何使条款和条件消失。我可以使用 button.hidden 隐藏它们,但是一旦用户 returns 进入应用程序的主屏幕,条款和条件就会再次出现,覆盖主屏幕,就像应用程序首次启动时一样.
我试过在按下 "agree" 时设置一个 NSUserDefault,然后在调用 -applicationWillTerminate 时重置它,但如果应用程序从后台关闭,则在应用程序关闭时似乎无法可靠地调用 applicationWillTerminate,因此,即使他们没有点击 "don't show these again",用户也永远不会再看到这些条款。这是我的代码:
- (void)viewDidLoad {
// Hide all the terms and conditions elements if either "neverAgain" or "termsPressed" is true
NSUserDefaults *defaults = [NSUserDefaults standardUserDefaults];
BOOL neverAgain = [defaults boolForKey:@"neverAgain"];
if (neverAgain == TRUE){
_terms.hidden=YES;
_hideTerms.hidden=YES;
_background.hidden=YES;
_dontShow.hidden=YES;
}
BOOL termsPressed = [defaults boolForKey:@"termsPressed"];
if (termsPressed == TRUE){
_terms.hidden=YES;
_hideTerms.hidden=YES;
_background.hidden=YES;
_dontShow.hidden=YES;
}
NSLog(@"View loaded. termsPressed = %i", termsPressed);
NSLog(@"View loaded. neverAgain = %i", neverAgain);
[super viewDidLoad];
}
- (IBAction)neverAgainPressed:(id)sender {
BOOL neverAgain = TRUE;
NSUserDefaults *defaults = [NSUserDefaults standardUserDefaults];
[defaults setBool:neverAgain forKey:@"neverAgain"];
[defaults synchronize];
NSLog(@"Don't show terms again pressed, neverAgain set to TRUE");
}
- (IBAction)termsPressed:(id)sender {
_terms.hidden = YES;
_hideTerms.hidden = YES;
_background.hidden = YES;
_dontShow.hidden = YES;
BOOL termsPressed = TRUE;
NSUserDefaults *defaults = [NSUserDefaults standardUserDefaults];
[defaults setBool:termsPressed forKey:@"termsPressed"];
[defaults synchronize];
NSLog(@"Terms accepted, termsPressed set to TRUE");
}
- (void)applicationWillTerminate:(UIApplication *)application {
BOOL termsPressed = FALSE;
NSUserDefaults *defaults = [NSUserDefaults standardUserDefaults];
[defaults setBool:termsPressed forKey:@"termsPressed"];
[defaults synchronize];
NSLog(@"Application entering background, termsPressed reset to FALSE");
}
@end
如果每次应用程序退出时都会调用一个方法,或者在整个应用程序 运行 期间持续存在的 .hidden 版本,我就已经准备好了。如果你们有任何想法,请告诉我。
如果你想要"don't show these again",为什么要重置?您可以在首次发布时和一段时间后(例如 30 天)显示:
BOOL ranBefore = [[NSUserDefaults standardUserDefaults] boolForKey:@"kRanBefore"];
NSDate *lastDate = [[NSUserDefaults standardUserDefaults] objectForKey:@"kLastCloseDate"];
NSTimeInterval timeDiff = [[NSDate date] timeIntervalSinceDate:lastDate];
int days = timeDiff / 86400;
if ((!ranBefore) || (days > 30)) {
[[NSUserDefaults standardUserDefaults] setBool:YES forKey:@"kRanBefore"];
[[NSUserDefaults standardUserDefaults] synchronize];
[[NSUserDefaults standardUserDefaults] setObject:[NSDate date] forKey:@"kLastCloseDate"];
... show something
}
或预约
- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions {
// Override point for customization after application launch.
return YES;
}
我正在 Objective C 中编写 iOS 应用程序。我希望条款和条件在用户打开应用程序时出现。我将有一个 "don't show these again" 按钮,这都是使用 NSUserDefaults 计算出来的。我想不通的是,如果用户点击 "agree"(termsPressed)而不是 "don't show these again"(neverAgainPressed),如何使条款和条件消失。我可以使用 button.hidden 隐藏它们,但是一旦用户 returns 进入应用程序的主屏幕,条款和条件就会再次出现,覆盖主屏幕,就像应用程序首次启动时一样.
我试过在按下 "agree" 时设置一个 NSUserDefault,然后在调用 -applicationWillTerminate 时重置它,但如果应用程序从后台关闭,则在应用程序关闭时似乎无法可靠地调用 applicationWillTerminate,因此,即使他们没有点击 "don't show these again",用户也永远不会再看到这些条款。这是我的代码:
- (void)viewDidLoad {
// Hide all the terms and conditions elements if either "neverAgain" or "termsPressed" is true
NSUserDefaults *defaults = [NSUserDefaults standardUserDefaults];
BOOL neverAgain = [defaults boolForKey:@"neverAgain"];
if (neverAgain == TRUE){
_terms.hidden=YES;
_hideTerms.hidden=YES;
_background.hidden=YES;
_dontShow.hidden=YES;
}
BOOL termsPressed = [defaults boolForKey:@"termsPressed"];
if (termsPressed == TRUE){
_terms.hidden=YES;
_hideTerms.hidden=YES;
_background.hidden=YES;
_dontShow.hidden=YES;
}
NSLog(@"View loaded. termsPressed = %i", termsPressed);
NSLog(@"View loaded. neverAgain = %i", neverAgain);
[super viewDidLoad];
}
- (IBAction)neverAgainPressed:(id)sender {
BOOL neverAgain = TRUE;
NSUserDefaults *defaults = [NSUserDefaults standardUserDefaults];
[defaults setBool:neverAgain forKey:@"neverAgain"];
[defaults synchronize];
NSLog(@"Don't show terms again pressed, neverAgain set to TRUE");
}
- (IBAction)termsPressed:(id)sender {
_terms.hidden = YES;
_hideTerms.hidden = YES;
_background.hidden = YES;
_dontShow.hidden = YES;
BOOL termsPressed = TRUE;
NSUserDefaults *defaults = [NSUserDefaults standardUserDefaults];
[defaults setBool:termsPressed forKey:@"termsPressed"];
[defaults synchronize];
NSLog(@"Terms accepted, termsPressed set to TRUE");
}
- (void)applicationWillTerminate:(UIApplication *)application {
BOOL termsPressed = FALSE;
NSUserDefaults *defaults = [NSUserDefaults standardUserDefaults];
[defaults setBool:termsPressed forKey:@"termsPressed"];
[defaults synchronize];
NSLog(@"Application entering background, termsPressed reset to FALSE");
}
@end
如果每次应用程序退出时都会调用一个方法,或者在整个应用程序 运行 期间持续存在的 .hidden 版本,我就已经准备好了。如果你们有任何想法,请告诉我。
如果你想要"don't show these again",为什么要重置?您可以在首次发布时和一段时间后(例如 30 天)显示:
BOOL ranBefore = [[NSUserDefaults standardUserDefaults] boolForKey:@"kRanBefore"];
NSDate *lastDate = [[NSUserDefaults standardUserDefaults] objectForKey:@"kLastCloseDate"];
NSTimeInterval timeDiff = [[NSDate date] timeIntervalSinceDate:lastDate];
int days = timeDiff / 86400;
if ((!ranBefore) || (days > 30)) {
[[NSUserDefaults standardUserDefaults] setBool:YES forKey:@"kRanBefore"];
[[NSUserDefaults standardUserDefaults] synchronize];
[[NSUserDefaults standardUserDefaults] setObject:[NSDate date] forKey:@"kLastCloseDate"];
... show something
}
或预约
- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions {
// Override point for customization after application launch.
return YES;
}