- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我正在努力完成这项工作。我想要一个按钮,一旦按下它一定时间就会被禁用。一旦该时间结束,该按钮将再次启用,直到再次按下它,然后在设定的时间内禁用它。我不希望通过重新启动应用程序轻松再次启用该按钮。它必须保持禁用状态,直到时间结束,直到下一次启动应用程序.. 到目前为止,我的代码只能禁用一次按钮。它不起作用,在时间过去后再次启用它。在我重新启动应用程序后,该按钮也会再次启用。这不应该发生。
任何人都有一个想法,我怎样才能让它按照我想要的方式工作?
这是我的代码:
button.isUserInteractionEnabled = false
Timer.scheduledTimer(withTimeInterval: 5, repeats: true, block: { _ in
button.isUserInteractionEnabled = false
})
我也试过这种方式:
_ = Timer.scheduledTimer(timeInterval: 5.0, target: self, selector: #selector(fireTimer), userInfo: nil, repeats: true)
_ = Timer.scheduledTimer(timeInterval: 0.0, target: self, selector: #selector(fireTimer2), userInfo: nil, repeats: false)
@objc 是:
@objc func fireTimer() {
print("Timer fired!")
}
@objc func fireTimer2() {
print("Start timer.")
}
有了这个,我想尝试一下,如果我可以设置开始时间和重复时间,希望通过按钮使事情顺利进行。我没有。
@objc private let actionButton: UIButton = {
let button = UIButton()
button.setTitle("Button Title", for: .normal)
button.titleLabel?.font = UIFont(name: "Times New Roman", size: 16)
button.setTitleColor(.secondaryLabel, for: .normal)
button.addTarget(self, action: #selector(didTapButton), for: .touchDown)
return button
}()
@objc func didTapButton() {
self.actionButton.isUserInteractionEnabled = false
Timer.scheduledTimer(withTimeInterval: 20, repeats: true) { _ in
self.actionButton.isUserInteractionEnabled = true
}}
那么如何将来自定时器的数据存储在
core data
中(???) 或
UserDefaults
(???) 或任何地方,所以重新启动应用程序时计时器不会重置?
最佳答案
Timer
类有一个初始化器 init(fire:interval:repeats:block)
允许您设置 Date
什么时候会火。这对您的问题很有用。你必须小心一点,确保你不要忘记安排计时器,否则它永远不会触发。
您可以使用它来编写这样的方法:
func disable(button buttonToDisable: UIButton, until date: Date) {
buttonToDisable.isEnabled = false
let timer = Timer.init(fire: date, interval: 0, repeats: false) { _ in
buttonToDisable.isEnabled = true
}
RunLoop.current.add(timer, forMode: .common)
}
此方法在给定日期之前禁用指定按钮。请注意
false
已通过
repeats
范围。我们只希望它运行一次。
let disabledTimeInterval = TimeInterval(30.0)
@IBAction func buttonPressed(_ sender: Any) {
let disabledUntil = Date().advanced(by: disabledTimeInterval)
disable(button: self.button, until: disabledUntil)
}
这负责在应用程序运行时启用和禁用按钮。但是您也提到您不希望用户能够停止和启动您的应用程序来绕过超时。您可以通过保存按钮应该被禁用的日期直到
UserDefaults
来处理这个问题。 .以下代码显示了如何保存和加载
Date
至
UserDefaults
.
let buttonDisabledUntilDateKey = "buttonDisabledUntil"
func save(disabledUntilDate date: Date) {
UserDefaults.standard.set(date, forKey: buttonDisabledUntilDateKey)
}
func loadDisabledUntilDate() -> Date? {
return UserDefaults.standard.object(forKey: buttonDisabledUntilDateKey) as? Date
}
您现在可以修改
buttonPressed
保存此数据的方法:
@IBAction func buttonPressed(_ sender: Any) {
let disabledUntil = Date().advanced(by: disabledTimeInterval)
save(disabledUntilDate: disabledUntil)
disable(button: self.button, until: disabledUntil)
}
最后,当您的 View 即将出现时,您应该检查当前时间是否早于应该重新启用按钮的时间,并在必要时禁用它。
override func viewWillAppear(_ animated: Bool) {
let now = Date()
if let buttonDisabledUntilDate = loadDisabledUntilDate(),
now < buttonDisabledUntilDate {
disable(button: self.button, until: buttonDisabledUntilDate)
}
}
关于ios - 按下时禁用按钮 30 秒,再次启用,然后再次按下时禁用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/68155099/
之前有人问过这个问题,但是当移动到具有相反字节序的平台(在这种情况下从大到小)时,我仍然对如何处理位域结构感到有些困惑。所以如果我有这个: typedef struct { unsigned
我之前问过这个问题here , 但它被标记为重复并已关闭。不幸的是,我被指出的答案不起作用.... 所以,再次: 我可以生成一个像这样的 eCharts4r 仪表 library(echarts4r)
关于 .NET 中对不可为空引用类型的支持存在很多问题。最大的希望是代码契约,但它仅限于对预算有限的人进行运行时检查。 对于代码契约以外的方法,Jon Skeet 写了一篇 blog post几年前,
当我通过将终止标志设置为true来停止线程'srch_slave_thread'时,(srch_slave_thread.terminate)释放线程的线程停止在析构函数的'inherited'行中,
We know that Windows 使用 CR + LF 对作为换行符,Unix(包括 Linux 和 OS X)使用单个 LF,而 MacOS 使用单个 CR。 这是否意味着 C 和 C++
This other SO question询问 WPF 中的自动完成文本框。有几个人已经构建了这些,其中给出的答案之一表明 this codeproject article . 但我还没有找到任何与
这个问题对我来说就像是噩梦的重演。该项目是使用 gpt3 训练聊天机器人,我正在试验嵌入。 我有文档,我正在尝试为不同的部分创建嵌入。根据我的测试,getEmbeddings() 似乎返回了一个值。但
我收到数据读取器初始化错误。我知道这个问题以前已经回答过很多次了,但这些案例似乎不适合我的情况。错误消息开头为“执行读取器:连接属性尚未初始化。” 程序: using System; using Sy
我知道这个问题已被多次询问和回答,但我正在抓狂,因为所提出的解决方案似乎都不起作用。 尽管有一个有效的配置文件,据我所知,它与 bundle 标识符匹配,但我收到了上述错误: 我已按照本网站上各种建议
所以我有一个小问题 这是我的文字 AFTER_2011/03/01 GREATER_2004_NOT 我想要 AFTER 和 GREATER,所以我有以下正则表达式: [A-Z]{2,}\\B 一开始
这个问题对我来说就像是噩梦的重演。该项目是使用 gpt3 训练聊天机器人,我正在试验嵌入。 我有文档,我正在尝试为不同的部分创建嵌入。根据我的测试,getEmbeddings() 似乎返回了一个值。但
我目前正在做具有图形功能的计算器应用程序。然后,我在我的计算器中有这个按钮,并将它连接到我的 Calculator2ViewController 上。此外,我将此按钮连接到另一个名为 GraphVie
昨天,我尝试以一种方式执行此操作...今天我尝试另一种方式,但仍然卡住了。我必须找到一种使用整数除法和取模来做到这一点的方法。这是我的代码,后面是错误消息。 public int evaluateFr
我大致正在处理以下内容: var i; var k = 5; $('document').ready(function () { $('#someElement').click(functio
又是realloc的问题。看来我在之前的很多realloc语句中都没有发现类似的问题。我将不胜感激您的兴趣。 我正在尝试读取格式的文本输入: g:;0,1,0,1,0 。我在源文本文件中有一组这种格式
我不知道为什么下面会给我:*“error LNK2001: unresolved external symbol 'struct Win32Vars_t win32' (?win32@@3UWin32
又是我。在我所有的问题中,我认为这是所有问题中最愚蠢的,但由于疲劳或愚蠢,我也需要一些帮助。然而,最重要的是,我这样做是为了我的一项任务,并且有一个严格的规则 - 我必须使用一个函数调用 char*
在 Ubuntu 14.04.5 上运行 MySql 5.5.53。当从文本文件导入数据时(加载数据 infil $FIL INTO TABLE &c),我收到可怕的提示,因为 secure_file
我在 Stackoverflow 中找到了大量关于如何选择组中第一行和最后一行的示例,但我无法根据需要调整它们。唉,我对 MySQL 的有限了解无济于事。 一些数据(date_time、val1 和
我遇到错误“连接必须有效并再次打开,当我更改我的 sql 查询代码时。任何人都可以帮忙吗??(编辑)在 form1 中我已经连接到数据库,在 form2 中我试图添加查询。 //IN Class1.c
我是一名优秀的程序员,十分优秀!