2017-02-19 84 views
0

我需要在点击几小时后禁用按钮(15)。我无法迅速找到答案。此外,如果我关闭应用程序计时器将保持。当用户改变iPhone的时间时,定时器仍然是相同的,这也是非常重要的。那么我应该使用当地时间吗?我对这个thx有新的建议。快速关闭按钮一段时间

+0

查看http://stackoverflow.com/questions/32528478/xcode-swift-how-to-disable-a-button-and-re-启用-24小时后 – rmaddy

回答

1

ystack的答案是正确的想法,但我认为你需要一个计时器。

正如@ystack所说,当用户点击一个按钮时,计算应该重新启动计时器的时间并保存到UserDefaults。这将是目前的时间加上几个小时。 (我们称之为buttonReenableTime。)

然后禁用您的按钮并启动一个持续时间设置为buttonReenableTime - now的计时器。 (直到重新启用时间的秒数)。使计时器变量变弱,并使用scheduledTimer方法之一来创建它,并同时启动它。

使计时器方法重新启用按钮。

每当您收到applicationDidBecomeActive消息时,使旧定时器无效,从UserDefaults读取保存的值,然后重新计算buttonReenableTime - now。如果它还在将来,请启动一个新的计时器。如果它现在是在过去,重新启用按钮立即(这意味着,当你的应用程序被暂停或不运行在所有的时间过去了。)

Date有一个方法timeIntervalSinceReferenceDate,可以让你把一个日期变成双。这是用于在日期值上进行数学计算。)

+0

所以我将不得不做一个计时器,点击按钮时启动它,将它保存在某个地方,然后比较定时器的值是高于15小时并停止。 –

+0

您无法保存定时器。你要节省的是你的计时器应该开火的时间。然后,当你的应用程序再次激活时,你会检查日期,看看时间是否已经过去。如果是这样,您将立即重新启用该按钮。如果没有,您将创建一个计时器设置为在目标时间触发。 –

1
  1. 商店时被点击的按钮UserDefaults
  2. 禁用按钮的交互通过设置button.enabled = false
  3. 重新启用当按钮后几个小时,查看当前的时间差时间与UserDefaults中保存的时间相对应。如果超过几小时,请重新启用按钮。
+0

但是如果我更改设备的时间会怎么样。 –

+0

@HonzaValta您可以探索为当前标准服务器时间执行网络提取,以消除对用户设备时间的依赖。检出:http:// stackoverflow。com/questions/9075303 /从苹果服务器获取日期和时间 – ystack

0

您应该使用简单的端点从服务器返回时间戳。

NSDate()可能很容易被欺骗,这是大多数公司使用的典型工作。

接下来,您应该在本地存储时间戳。对于简单的实现,用户默认值是最好的选择,但是您可以使用领域或核心数据将其存储为独立对象,具体取决于您的用例。只需检查从服务器获得的时间是否大于本地存储的时间。

至于取消按钮,如果它是一个uibutton,你可以使用button.enabled = false。或者如果你不使用uibutton,你可以使用button.userInteractionEnabled = false