我有一个函数,我想在每次调用间隔时运行该函数,但我只想在我的UIButton被单击后执行.我的问题是,从我运行模拟器的那一刻起,函数就会自动执行.为了防止发生这种情况,我try 定义isPlayButtonClicked并将其初始化为false,因此当单击playAnimation UIButton时,它将其设置为TRUE,然后将其设置为wasPlayButtonClicked,以判断初始布尔值更改是否会在控制台中打印为"选定",但正如我所说的,我甚至在单击按钮之前就看到它被打印出来.

 var setTimer: Timer!
 var isPlayButtonClicked: Bool = false

 @objc func playAnimation(_ sender: Any) {

         isPlayButtonClicked = true
        wasPlayButtonClicked()
    }

  func wasPlayButtonClicked() {
        if isPlayButtonClicked == true  {
            print("selected ")
        }
    }


    
    override func viewDidLoad() {
        super.viewDidLoad()

setTimer = Timer.scheduledTimer(timeInterval: 2, target: self, selector: #selector(playAnimation(_:)), userInfo: nil, repeats: true)


}

我如何才能让它等待我的Click事件执行?

推荐答案

最简单的解决方法是更改计时器,使其调用wasPlayButtonClicked Select 器而不是playAnimation Select 器.

更好的解决方法是在playAnimation函数中触发计时器.在实际点击按钮之前,无需启动计时器.

以下是对您的视图控制器的修改:

class SomeVC: UIViewController {
    var setTimer: Timer? // change to optional

    @objc func playAnimation(_ sender: Any) {
        setTimer?.invalidate() // Esnure there's only one timer even if the button is tapped multiple times
        // Change selector to wasPlayButtonClicked
        setTimer = Timer.scheduledTimer(timeInterval: 2, target: self, selector: #selector(wasPlayButtonClicked), userInfo: nil, repeats: true)

        wasPlayButtonClicked()
    }

    @objc func wasPlayButtonClicked() {
        print("selected")
    }

    override func viewDidLoad() {
        super.viewDidLoad()

        // Don't setup the timer here
    }
}

请注意,当视图控制器被解除时,您可能希望使计时器无效.

Swift相关问答推荐

自定义完整屏幕封面动画

在swift静态var扩展中,如何或可以访问和返回具体类?

如何在Swift中获得与Python相同的HMAC—SHA512签名?

绑定到可选值的非可选属性?'

音频播放器无法播放URL音频(操作系统状态错误2003334207.)

修改数组中每个类实例的属性

SWIFT`String.Encoding`:`.unicode`vs`.utf16`

KMM-Swift铸造密封类

可以';t在标记为@Observable的类上使用属性包装

为什么 Swift URL 的 init?(string: String,relativeTo: URL?) 仅添加协议?

当变量首次用于其自己的初始化时,如何清除变量...在初始化之前使用错误?

TextField 键入未完成

String(validatingUTF8:) 和 String(utf8String:) 之间有区别吗?

如何测试可选 struct 的协议一致性

如何从另一个 swift 文件中调用函数

如何处理永远不会失败的 String.Encoding 初始化程序?

如何在 Xcode 中的 UITests 下以通用方式访问后退栏按钮项?

如何在界面生成器中创建 UILayoutGuide?

如何快速识别字符串中的大写和小写字符?

iOS 视图可见性消失了