Я пытаюсь добавить собственное поведение к своим кнопкам. Если нажать один раз - выполняется одно действие. Если щелкнуть два раза, выполняется еще один.
Я видел такое решение в этом ответе и пробовал все возможные комбинации:
clickOnce.shouldBeRequiredToFailByGestureRecognizer(clickTwice)
clickTwice.shouldBeRequiredToFailByGestureRecognizer(clickOnce)
clickOnce.shouldRequireFailureOfGestureRecognizer(clickTwice)
clickTwice.shouldRequireFailureOfGestureRecognizer(clickOnce)
clickOnce.canPreventGestureRecognizer(clickTwice)
clickOnce.canBePreventedByGestureRecognizer(clickTwice)
clickTwice.canPreventGestureRecognizer(clickOnce)
clickTwice.canBePreventedByGestureRecognizer(clickOnce)
Но у меня ничего не получалось.
А вот и полный код:
import Cocoa
class ViewController: NSViewController {
override func viewDidLoad() {
super.viewDidLoad()
// Do any additional setup after loading the view.
let buttonTestOne = NSButton(frame: CGRect(x: 500, y: 500, width: 100, height: 500))
let clickOnceForTestOne = NSClickGestureRecognizer(target: buttonTestOne, action: #selector(ViewController.clickOneTime(_:)))
clickOnceForTestOne.numberOfClicksRequired = 1
buttonTestOne.addGestureRecognizer(clickOnceForTestOne)
self.view.addSubview(buttonTestOne)
let arrTestButtons = ["One", "Two", "Three"]
var x = 0
var y = 0
for item in arrTestButtons{
let buttonNew = NSButton(frame: CGRect(x: x, y: y, width: 100, height: 100))
x = x + 120
y = y + 120
buttonNew.attributedTitle = NSAttributedString(string: item)
let clickOnce = NSClickGestureRecognizer(target: self, action: #selector(ViewController.clickOneTime(_:)))
clickOnce.numberOfClicksRequired = 1
buttonNew.addGestureRecognizer(clickOnce)
let clickTwice = NSClickGestureRecognizer(target: self, action: #selector(ViewController.clickTwoTimes(_:)))
clickTwice.numberOfClicksRequired = 2
buttonNew.addGestureRecognizer(clickTwice)
clickOnce.shouldBeRequiredToFailByGestureRecognizer(clickTwice)
clickTwice.shouldBeRequiredToFailByGestureRecognizer(clickOnce)
clickOnce.shouldRequireFailureOfGestureRecognizer(clickTwice)
clickTwice.shouldRequireFailureOfGestureRecognizer(clickOnce)
clickOnce.canPreventGestureRecognizer(clickTwice)
clickOnce.canBePreventedByGestureRecognizer(clickTwice)
clickTwice.canPreventGestureRecognizer(clickOnce)
clickTwice.canBePreventedByGestureRecognizer(clickOnce)
self.view.addSubview(buttonNew)
}
}
func clickOneTime(g:NSClickGestureRecognizer){
if g.state == .Ended {
Swift.print("single click")
}
}
func clickTwoTimes(g: NSClickGestureRecognizer){
if g.state == .Ended {
Swift.print("DOUBLE CLICK!")
}
}
override var representedObject: AnyObject? {
didSet {
// Update the view, if already loaded.
}
}
}
Что я делаю неправильно? Я думаю, что ошибка должна быть довольно простой, я либо звоню не с того места, либо что-то в этом роде, но я не могу понять.
Вот лог-файл, одинаковый для всех комбинаций:
Нажал один раз:
single click
Как и ожидалось
Щелкнул дважды:
single click
DOUBLE CLICK!
Который запускает как одиночный, так и двойной щелчок.
Я прочитал документацию. И я пробовал все комбинации, потому что не мог найти решение.
Я также пробовал с журналами. Итак, Swift.print(clickOnce.shouldBeRequiredToFailByGestureRecognizer(clickTwice))
и один из них, но это дает мне false
.
clickOnce.shouldRequireFailureOfGestureRecognizer(clickTwice)
? - person luk2302   schedule 15.05.2016clickOnce.shouldRequireFailureOfGestureRecognizer(clickTwice)
иSwift.print("TEST!!!!", clickOnce.shouldRequireFailureOfGestureRecognizer(clickTwice))
А вот лог:TEST!!!! false TEST!!!! false TEST!!!! false single click single click DOUBLE CLICK!
Первые три строчки работают при прогоне цикла, последние три - при клике. Таким образом, он ставит false с самого начала. - person Anna-Lischen   schedule 15.05.2016