【问题标题】:How to set a timer to enable/disable buttons如何设置计时器以启用/禁用按钮
【发布时间】:2019-12-23 21:42:02
【问题描述】:

我遇到了一个问题。 我想设置一个计时器,可以禁用我的ViewController2 的 6 个大按钮。

例如:在计时器达到 100 之前,无法单击按钮 Clue1Button、Clue2Button、Clue3Button、Clue4Button、Clue5Button、Clue6Button 在计时器达到 200 之前,无法点击按钮 2、3、4、5、6 ...

我应该怎么做?我尝试了几次,但每次都失败了。感谢您的帮助

ViewController2的代码:

//  ViewController2.swift
//  PROJET X
//
//  Created by Alexis Decloedt on 22/12/2019.
//  Copyright © 2019 Alexis Decloedt. All rights reserved.
//

import UIKit




class ViewController2: UIViewController {
    @IBOutlet weak var Clue1Button: UIButton!
    @IBOutlet weak var Clue2Button: UIButton!
    @IBOutlet weak var Clue3Button: UIButton!
    @IBOutlet weak var Clue4Button: UIButton!
    @IBOutlet weak var Clue5Button: UIButton!
    @IBOutlet weak var Clue6Button: UIButton!


    override func viewDidLoad() {
        super.viewDidLoad()


        // Do any additional setup after loading the view.
    }

  @IBAction func ChestButton(_ sender: Any) {
        dismiss(animated: false, completion: nil)
    }

    }
//
//  ViewController2.swift
//  PROJET X
//
//  Created by Alexis Decloedt on 22/12/2019.
//  Copyright © 2019 Alexis Decloedt. All rights reserved.
//

import UIKit

var currentCount : Int? 
var maxCount : Int?
var mytimer : Timer?
let ValeurStock = "ValeurStock"


class ViewController2: UIViewController {
    @IBOutlet weak var Clue1Button: UIButton!
    @IBOutlet weak var Clue2Button: UIButton!
    @IBOutlet weak var Clue3Button: UIButton!
    @IBOutlet weak var Clue4Button: UIButton!
    @IBOutlet weak var Clue5Button: UIButton!
    @IBOutlet weak var Clue6Button: UIButton!


    override func viewDidLoad() {
        super.viewDidLoad()

    currentCount = 0

        self.mytimer = Timer.scheduledTimer(timeInterval: 2, target: self, selector: #selector(increase), userInfo: nil, repeats: true)


    }

  @IBAction func ChestButton(_ sender: Any) {
        dismiss(animated: false, completion: nil)

    }

    func increase() {
        currentCount! += 1

    }

        func buttonStatus() {
            if currentCount ?? <#default value#> >= 100 {
            //I'm stuck ?? How to continue ?
            }
        }


    }


Try to make my button disable/enable

【问题讨论】:

  • 您的代码没有任何计时器。您能否展示您使用计时器的尝试并解释您遇到的具体问题?
  • 每当我尝试设置计时器时,我的应用程序都会崩溃。我想我做错了,所以我拿出计时器部分来展示一些干净的东西并从头开始@Paulw11 我跟着这个视频:youtube.com/watch?v=gPr4qQhz6SU
  • 请显示您尝试的代码和您遇到的崩溃。
  • 我完全被卡住了@matt 你的回答对我没有帮助。我不指望别人这么说,我想先学习。我想知道是否有人已经编写了类似的代码,这可能会给我带来一些答案元素。
  • @matt 我编辑了我的帖子。感谢您的回复我不确定我的编辑代码。我的不同问题是: - 如何正确存储计时器中的值? - 如何正确启动我的计时器 -> 理解#selector 在说什么的一些困难? - 然后如何根据我的存储值激活/停用按钮?我今天设法启用/禁用我的按钮,但是当我必须在一个函数中实现它时我被阻止了。这对我来说似乎不合逻辑:/

标签: ios swift timer viewcontroller disable


【解决方案1】:

你可能想做的是:

//Add variable that will count how many times Timer was repeated.
var timerCount = 0

//Create timer
Timer.scheduledTimer(withTimeInterval: 100, repeats: true) { t in

    //After first 100 sec passed, timer will get triggered and enable the buttons you want.
    button1.isEnabled = true
    button2.isEnabled = true

    //After another 100 passed, timer will enable other buttons
    if timerCount == 1 {
        button3.isEnabled = true
        button4.isEnabled = true
        t.invalidate()
    }

    //Adds 1 to timer count
    timerCount += 1
}

【讨论】:

  • 感谢@Shalugin 的回复。我对你写的东西有一些疑问。 ``` //经过前 100 秒后,计时器将被触发并启用您想要的按钮。 button1.isEnabled = true button2.isEnabled = true```你怎么知道de按钮会在100秒后立即启用。对我来说,在这种情况下,它将自动启用而无需等待 100 秒。当计时器 > 1 时会发生什么?启动计时器时不必瞄准计数器?您不需要创建一个函数来增加 var timerCount 吗?
  • 不完全是。如果你这样设置 Timer,它不会立即触发。第一次触发将仅在前 100 秒过去后。当它发生时,它会启用第一组按钮。然后它再等待 100 秒并启用第二束等。要停用 Timer,请使用 t.invalidate()。因此,在我的示例中,当 Timer 在总共 200 秒后完成第二轮时,var timerCount 将等于 1,它将触发 if 语句,这将启用最后一组按钮,然后使计时器无效。
  • 您是否有即时消息可以更轻松地进行讨论。我已经尝试过您的解决方案,但我的按钮立即启用,无需等待 100 秒。然后几次后应用崩溃
  • “线程 1:致命错误:在隐式展开可选值时意外发现 nil”
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2017-11-07
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2010-09-13
相关资源
最近更新 更多