弄清楚长按和点击之间被按下的按钮。迅速

问题描述 投票:0回答:2

因此,我需要听众长时间按下按钮,但是我需要知道按下了哪个按钮。是否可以找出点击和长按功能中按下了哪个按钮,或者我需要为每个按钮执行两个功能?

let tapGesture = UITapGestureRecognizer(target: self, action: #selector(tap))
let longGesture = UILongPressGestureRecognizer(target: self, action: #selector(long))
longGesture.minimumPressDuration = 0.5
smallOption.addGestureRecognizer(tapGesture)
mediumOption.addGestureRecognizer(tapGesture)
largeOption.addGestureRecognizer(tapGesture)
smallOption.addGestureRecognizer(longGesture)
mediumOption.addGestureRecognizer(longGesture)
largeOption.addGestureRecognizer(longGesture)

@objc func tap(_ sender: UIGestureRecognizer){
    print("short-press")
}
@objc func long(_ sender: UIGestureRecognizer){
    print("long-press")
}
ios swift uibutton
2个回答
0
投票

每个按钮的相同手势不需要两个功能。更改方法定义以接受UIButton(在您的情况下)而不是UIGestureRecognizer。然后,通过直接验证标签或类型来检查发件人...

@objc func tap(_ sender: UIButton){
  switch sender {
  case button1: // or by tags of buttons
  case button2:
  ...
  default: break
}

0
投票

在这种情况下,主要问题是两个手势仅会为largeOption按钮添加!为了澄清起见,仅为一个组件添加了手势,在您的情况下,仅应为最新组件添加手势(即largeOption):

smallOption.addGestureRecognizer(tapGesture) <-- skipped
mediumOption.addGestureRecognizer(tapGesture) <-- skipped
largeOption.addGestureRecognizer(tapGesture) <-- added
smallOption.addGestureRecognizer(longGesture) <-- skipped
mediumOption.addGestureRecognizer(longGesture) <-- skipped
largeOption.addGestureRecognizer(longGesture) <-- added

从逻辑上讲,这可能是您的问题的答案:

是否可能找出点击和长按功能中按下了哪个按钮,或者我需要为每个按钮执行两个功能?

您需要为每个按钮添加两个手势,因为手势仅适用于一个按钮。

但是,除了@objc func tap(_ sender: UIGestureRecognizer)@objc func long(_ sender: UIGestureRecognizer)现有方法之外,您无需声明新的操作方法。您可以做的是检查sender的视图。示例:

假设我们为每个按钮手动添加了拖曳手势:

// gestures:
let smallOptionTapGesture = UITapGestureRecognizer(target: self, action: #selector(tap))
let smallOptionLongGesture = UILongPressGestureRecognizer(target: self, action: #selector(long))
smallOptionLongGesture.minimumPressDuration = 0.5

let mediumOptionTapGesture = UITapGestureRecognizer(target: self, action: #selector(tap))
let mediumOptionLongGesture = UILongPressGestureRecognizer(target: self, action: #selector(long))
mediumOptionLongGesture.minimumPressDuration = 0.5

let largeOptionTapGesture = UITapGestureRecognizer(target: self, action: #selector(tap))
let largeOptionLongGesture = UILongPressGestureRecognizer(target: self, action: #selector(long))
largeOptionLongGesture.minimumPressDuration = 0.5

// adding them:
smallOption.addGestureRecognizer(smallOptionTapGesture)
mediumOption.addGestureRecognizer(mediumOptionTapGesture)
largeOption.addGestureRecognizer(largeOptionTapGesture)

smallOption.addGestureRecognizer(smallOptionLongGesture)
mediumOption.addGestureRecognizer(mediumOptionLongGesture)
largeOption.addGestureRecognizer(largeOptionLongGesture)

因此,您可以做的是:

@objc func tap(_ sender: UIGestureRecognizer) {
    // an example of how you could check the button
    if sender.view == smallOption {
        print("small short-press")
    } else if sender.view == mediumOption {
        print("medium short-press")
    } else if sender.view == largeOption {
        print("large short-press")
    }
}
@objc func long(_ sender: UIGestureRecognizer) {
    // you could apply the same above approach here
}

另一个选项是分别为每个按钮创建动作方法。

© www.soinside.com 2019 - 2024. All rights reserved.