我只是想知道具有特定时间间隔是否按下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.
}
}
答案 0 :(得分:2)
如果你想检查UIButton是否被按下,你应该处理TouchDown处理程序并将按钮的状态更改为在touchDown hadnler中按下。 您可以跟踪ToucUpInside方法以将按钮状态更改为未按下。
例如:
button.addTarget(self, action:#selector(BtnPressed(_:)), for: .touchDown);
button.addTarget(self, action:#selector(BtnReleased(_:)), for: .touchUpInside);
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.