检测是否按特定时间间隔按下UIButton

时间:2017-04-05 06:43:09

标签: ios swift uibutton

我只是想知道具有特定时间间隔是否按下UIButton。 (我的代码中2秒) 如果按下按钮,则持续2秒,如果没有,则某个值应为1,否则为2。

为了检查,我在下面制作了我的代码。 但是unexpected结果即将到来,我不知道如何解决它。 救救我!

import UIKit

class ViewController: UIViewController {
    var gameTimer: Timer!

@IBAction func btnClick(_ sender: Any) {
    if let button = sender as? UIButton {
        if (button.isSelected) {
            print(" Not Selected");
        } else {
            print(" Selected");
        }
    }
}
override func viewDidLoad() {
    super.viewDidLoad()
    // Do any additional setup after loading the view, typically from a nib.

    gameTimer = Timer.scheduledTimer(timeInterval: 2, target: self, selector: #selector(btnClick(_:)), userInfo: nil, repeats: true)
}

override func didReceiveMemoryWarning() {
    super.didReceiveMemoryWarning()
    // Dispose of any resources that can be recreated.
}
}

6 个答案:

答案 0 :(得分:2)

如果你想检查UIButton是否被按下,你应该处理TouchDown处理程序并将按钮的状态更改为在touchDown hadnler中按下。 您可以跟踪ToucUpInside方法以将按钮状态更改为未按下。

例如:

button.addTarget(self, action:#selector(BtnPressed(_:)), for: .touch​Down);

button.addTarget(self, action:#selector(BtnReleased(_:)), for: .touch​Up​Inside);


var buttonSelection:Bool = false

 func BtnPressed(_ sender: Any) 
 {
      button.selected = true

  }

 func BtnReleased(_ sender: Any) 
 {
      button.selected = false

  }

现在,您可以使用计时器检查按钮的状态,如下所示:

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



 func BtnPressed() 
 {

     if (button.isSelected) {
        print("Button is Pressed");
    } else {
        print("Not Pressed");
    }

  }

答案 1 :(得分:1)

您可以使用以下代码。

class ViewController: UIViewController {
    var gameTimer: Timer!

    @IBAction func btnClick(_ sender: Any) {
        let button =  UIButton()
        if (button.isSelected) {
            print(" Not Selected");
        } else {
            print(" Selected");
        }
    }

    override func viewDidLoad() {
        super.viewDidLoad()
        // Do any additional setup after loading the view, typically from a nib.

        gameTimer = Timer.scheduledTimer(timeInterval: 2, target: self, selector: #selector(btnClick(_:)), userInfo: nil, repeats: true)
    }

    override func didReceiveMemoryWarning() {
        super.didReceiveMemoryWarning()
        // Dispose of any resources that can be recreated.
    }
}

答案 2 :(得分:0)

BtnClick是点击按钮的动作,不应该是计时器触发的方法。此外,isSelected不相关,因为在点击按钮时需要手动设置。 (这是一个按钮的状态,而不是动作本身。)

您需要进行2项更改:

1)在btnClick中你需要做:

 btnClick.selected = true

2)计时器应该触发其他方法,让我们说func checkButtonState(),在这个方法中你需要像在btnClick中那样检查按钮状态

 func checkButtonState() {

    if (button.isSelected) {
        print(" Not Selected");
    } else {
        print(" Selected");
    }
}

答案 3 :(得分:0)

sender as? UIButton无效,因为在这种情况下发件人是您的计时器。如果有人实际点击按钮,按钮将是发件人。你应该把你的按钮作为一个权利,并使用这个变量来检查button.isSelected是否是真的

/克努特

答案 4 :(得分:0)

如果要向Timer添加选择器,那么默认情况下的参数将作为Timer而不是UIButton。

下面的代码不会执行:

if let button = sender as? UIButton 

而是选择BOOL变量来检查天气是否被选中或未选中

var buttonSelection:Bool = false

 func btnClick(_ sender: Any) 
 {
        if (buttonSelection == true) 
        {
           buttonSelection = false;
           print(" Not Selected");
        } else {
           buttonSelection = true;
           print(" Selected");
        }
  }

这有助于解决您的要求。

答案 5 :(得分:0)

    Put this code in button action.

    @IBAction func btnClick(_ sender: Any) 
    {
        if let button = sender as? UIButton 
        {
            button.isSelected = true
        }

    }

    And change your timer selector

    override func viewDidLoad() {
        super.viewDidLoad()
        // Do any additional setup after loading the view, typically from a nib.

        gameTimer = Timer.scheduledTimer(timeInterval: 2, target: self, selector: #selector(timerSelector), userInfo: nil, repeats: true)
    }

    timer selector will check button status.

    func timerSelector()
    {
        if (button.isSelected) {
                print(" Selected");
            } else {
                print("Not Selected");
            }
    }

if your button is pressed in 2 second than button.isseleced become true.