2017-04-05 86 views
3

我只是想知道是否被按下UIButton的或不特定的时间间隔的UIButton。 (在我的代码2秒) 随着2秒期间,如果按钮被按下时,如果2不是一些值应为1。检测是否被按下一个特定的时间间隔

为了确认,我做了我下面的代码。 但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. 
} 
} 
+0

等待第2秒后应该怎么办?你想改变的值是2吗?即这种情况下的重置点是什么? –

回答

2

如果你想检查的UIButton按下与否,你应该处理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"); 
    } 

    } 
+0

非常感谢。通过使用addTarget语法,我解决了我的问题! – ksh

0

BtnClick是轻敲按钮的作用下,不应该是其计时器触发的方法。此外,isSelected并不相关,因为这是您点击该按钮时需要手动设置的内容。 (这是一个按钮的状态,而不是操作本身)。

你需要做2点的变化:

1)在btnClick你需要做的:

btnClick.selected = true 

2)计时器应该解雇等方法,让我们说FUNC checkButtonState(),并在此方法,你需要检查按键的状态就像你在btnClick

func checkButtonState() { 

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

sender as? UIButton做是行不通的,因为在这种情况下,发件人是你的计时器。如果是某人真正点击该按钮,该按钮将成为发件人。你应该让你的按钮propterty并使用此变量,而不是检查button.isSelected与否。

/克努特

0

如果要添加选择器计时器,然后默认会去当计时器不作为的UIButton的说法。

下面的代码将不会执行:

if let button = sender as? UIButton 

而是采取布尔变量来检查的天气里,选择或不选择

var buttonSelection:Bool = false 

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

这将有助于解决您的要求。

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. 
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. 
    } 
}