如何在iOS中的特定时间每天更改视图控制器

时间:2014-01-28 18:58:57

标签: ios objective-c cocoa-touch

我有一个案例,用户需要在每天早上8点之前提交表格。

当他们提交时,会覆盖确认视图以显示他们提交的用户,并阻止他们再次提交。

早上8点之后,我想通过隐藏重叠的视图来清除表单并再次使用表单视图。如果可能的话,我希望在早上8点的某个时间点这样做。

我正在考虑用NSTimer完成此任务。我可以设置一个将在早上8点运行的计时器,它将清除表格并删除叠加视图吗?

有没有更好的方法来处理这种情况?

2 个答案:

答案 0 :(得分:1)

您可以使用本地推送通知。官方文件在这里 https://developer.apple.com/library/ios/documentation/NetworkingInternet/Conceptual/RemoteNotificationsPG/Introduction.html

类似的东西:

UILocalNotification *localNotification = [[UILocalNotification alloc] init];
localNotification.fireDate = [NSDate date]; // Replace me with your "event" date
localNotification.timeZone = [NSTimeZone localTimeZone];
localNotification.repeatInterval = kCFCalendarUnitDay;
[[UIApplication sharedApplication] scheduleLocalNotification:localNotification];
然后你可以"赶上"作为文档说明的通知

  

如果您的应用程序位于最前端,则应用程序:didReceiveRemoteNotification:或应用程序:didReceiveLocalNotification:方法在其应用程序委托上调用如果您的应用程序不在最前面或未运行,则通过检查选项来处理通知字典传递给 UIApplicationLaunchOptionsLocalNotificationKey 或UIApplicationLaunchOptionsRemoteNotificationKey键的应用委托的应用程序:didFinishLaunchingWithOptions:

您不能只使用NSTimer,因为当您的应用关闭时它不会运行,但是另一个涉及NSTimer的解决方案是为事件日期创建NSTimer,然后观察 UIApplicationDidEnterBackgroundNotification ,这里如果计时器正在运行,你将停止计时器,持久化timer.fireDate(例如你可以将它保存在NSUserDefault中),最后观察 UIApplicationDidBecomeActiveNotification ,你可以重新创建计时器(使用您之前保存的值减去当前时间)或只是在事件时间已经过去时触发操作。

答案 1 :(得分:0)

如果您不想使用UILocalNotification,可以通过以下方式动态定义初始视图控制器(VC):

  • didFinishLoadingWithOptions:
  • 中的AppDelegate编程方式加载VC
  • 或者继承您的UINavigationController并动态设置rootController