1.思路
一天或者一定时间内某个方法只执行一次,要在执行此方法时判断是否在要求的时间内执行过,执行后还要保存当前时间,下次执行时和保存的时间对比即可得知是否符合执行条件
下面以一天执行一次为例:
Swift版
class UserHelper {
//获取今天日期
static func getTodayTime() -> String{
let dateFormat = DateFormatter()
dateFormat.dateFormat = "yyyy.MM.dd"
return dateFormat.string(from: Date())
}
//返回是否可以弹出
static func getRepayNoticeCanShow() -> Bool {
let defaults = UserDefaults()
let dateStr = defaults.object(forKey: "popWindowOnceADay") as? String
return dateStr == getTodayTime() ? false : true //判断时间是否相同
}
//窗口弹出后保存日期
static func setRepayNoticeTime(){
let defaults = UserDefaults()
defaults.set(getTodayTime(), forKey: "popWindowOnceADay")
defaults.synchronize()
}
}
OC版
#import "PopWindowsHelper.h"
@implementation PopWindowsHelper
+ (BOOL)getPopWindowIsShowed
{
NSUserDefaults *defaults = [NSUserDefaults standardUserDefaults];
NSString *dateString = [defaults objectForKey:[NSString stringWithFormat:@"%@",@"pop_windows"]];
if (dateString && [dateString isEqualToString:[self getTodayDateStr]]) {//判断,如果时间相同返回NO
return NO;
}else
{
return YES;
}
}
+ (void)setWindowPopedTime
{
NSUserDefaults *defaults = [NSUserDefaults standardUserDefaults];
[defaults setObject:[self getTodayDateStr] forKey:[NSString stringWithFormat:@"%@",@"pop_windows"]];
[defaults synchronize];
}
+(NSString*)getTodayDateStr//获得当前时间(日期)
{
NSDateFormatter *dateformatter=[[NSDateFormatter alloc] init];
[dateformatter setDateFormat:@"YYYY-MM-dd"];
return [dateformatter stringFromDate:[NSDate date]];
}
@end
//一天只弹窗一次
if ([PopWindowsHelper getPopWindowIsShowed]) {
InvestPopWindows *aInvestPopWindows = [[InvestPopWindows alloc] initWithFrame:self.view.frame PopViewType:popType];
aInvestPopWindows.delegate = self;
[self.view addSubview:aInvestPopWindows];
[PopWindowsHelper setWindowPopedTime];//保存当前时间
return;
}
}