【发布时间】:2026-02-02 06:05:01
【问题描述】:
我正在使用 Objective C 编写 iOS 应用程序。我希望在用户打开应用程序时显示条款和条件。我将有一个“不再显示这些”按钮,这都是使用 NSUserDefaults 计算出来的。我想不通的是,如果用户点击“同意”(termsPressed)而不是“不再显示这些”(neverAgainPressed),如何使条款和条件消失。我可以使用 button.hidden 隐藏它们,但是一旦用户返回应用程序的主屏幕,条款和条件就会再次出现,就像应用程序首次启动时一样覆盖主屏幕。
我尝试在按下“同意”时设置 NSUserDefault,然后在调用 -applicationWillTerminate 时将其重置,但如果应用程序从后台关闭,则应用程序关闭时似乎不会可靠地调用 applicationWillTerminate,因此用户即使他们没有点击“不再显示这些”,也永远不会再看到这些条款。这是我的代码:
- (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 版本在应用运行的整个过程中都持续存在,那么我就准备好了。如果你们有任何想法,请告诉我。
【问题讨论】:
-
当 de app 终止时,为什么要为 termsPressed 设置 false?关闭应用程序时会调用 applicationWillTerminate 方法,因此每次再次启动时,应用程序的值都会为 false,这就是为什么总是显示的原因。
-
从 applicationWillTerminate 中删除代码,然后重试。
-
我在 applicationWillTerminate 之后重置代码的原因是我希望每次打开应用程序时都显示这些术语,除非用户之前单击了“不再显示”。最初打开应用程序时,termsPressed 应该为 false,但在应用程序按“接受条款”后打开应用程序的整个过程中为 true。删除 applicationWillTerminate 中的代码不会做任何事情 - 就目前而言,代码不会可靠地将计数器重置为 FALSE,因为每次应用关闭时似乎都不会触发该方法。
标签: ios objective-c hide