在保持正常的突出显示行为的同时长按按钮?

时间:2019-01-05 01:43:56

标签: swift user-interface cocoa-touch uigesturerecognizer uilongpressgesturerecogni

我为按钮分配了一个长按手势识别器。

我希望按钮在长按期间保持突出显示(就像在正常单击期间一样),并且在长按之后不触发单击。

到目前为止,我已经尝试过:

为了说明为什么具有此功能可能很重要,让我们以显示数字的UILabel和递增该数字的按钮为例。

单击可将数字增加1,长按则可将数字增加10(稍后可以添加一个计时器,该功能是在按住手指时“自动增加”数字,但出于以下目的)这个例子,我省去了。)

所以我从以下代码开始:

import UIKit

class ViewController: UIViewController {

    @IBOutlet weak var numberDisplayLabel: UILabel!
    @IBOutlet weak var incrementNumberButton: UIButton!
    @IBOutlet var buttonLPGR: UILongPressGestureRecognizer!

    var numVal = 0

    override func viewDidLoad() {
        super.viewDidLoad()
        // Do any additional setup after loading the view, typically from a nib.
        numberDisplayLabel.text = String(numVal)
    }

    @IBAction func buttonClicked(_ sender: UIButton) {
        print("button clicked")
        numVal += 1
        numberDisplayLabel.text = String(numVal)
    }

    @IBAction func longPressOnButtonRecognized(_ sender: UILongPressGestureRecognizer) {
        print("long press recognized, state: \(sender.state.rawValue)")
        if (sender.state == .ended) {
            numVal += 10
            numberDisplayLabel.text = String(numVal)
        }
    }

}

让我们尝试单击一下,看看是否可行:

enter image description here

是的,是的。

现在让我们看看如果我们长按它会发生什么:

enter image description here

所以...您可以看到,按下按钮时该按钮高亮显示(正常显示),但是当识别出长按时(进入.began状态),该高亮显示被取消。当我们最终释放触摸时,该数字将按预期增加10。

但是,如果我们希望按钮在整个过程中都保持高亮状态...

我们可以尝试将这段代码添加到viewDidLoad():

buttonLPGR.cancelsTouchesInView = false

这应该防止长按识别取消初始触摸。

让我们看看! :

enter image description here

嗯,我们已经达到了突出显示所需的内容,但是现在,由于长按不再取消常规按,因此仍调用按钮的touchUpInside动作功能,因此数字不仅增加了10 ,但也减1。

这是我不知道该怎么做的地方。

那么,再一次:我们如何在长按期间将按钮保持突出显示(就像在正常单击过程中一样),以及长按后不触发单击? >

如果触摸框架提供了一种无需解决方法的方法,则将是首选。

0 个答案:

没有答案