swift UIButton具有单按和长按事件快速

fcg9iug3  于 2023-04-28  发布在  Swift
关注(0)|答案(3)|浏览(201)

我想在button clickbutton long click上触发两个动作。我已经在我的界面构建器中添加了一个UIbutton。我如何使用IBAction触发两个动作,有人能告诉我如何存档吗?
这是我用来点击按钮的代码

@IBAction func buttonPressed (sender: UIButton) {
....
}

我可以使用这种方法还是我必须使用另一种方法长时间点击?

mkshixfv

mkshixfv1#

如果你想执行任何操作与单击你和长按,你可以添加手势到按钮这样:

@IBOutlet weak var btn: UIButton!

override func viewDidLoad() {

    let tapGesture = UITapGestureRecognizer(target: self, #selector (tap))  //Tap function will call when user tap on button
    let longGesture = UILongPressGestureRecognizer(target: self, #selector(long))  //Long function will call when user long press on button.
    tapGesture.numberOfTapsRequired = 1
    btn.addGestureRecognizer(tapGesture)
    btn.addGestureRecognizer(longGesture)
}

@objc func tap() {

    print("Tap happend")
}

@objc func long() {

    print("Long press")
}

这样你就可以为单个按钮添加多个方法,你只需要为那个按钮选择插座。.

vhmi4jdf

vhmi4jdf2#

@IBOutlet weak var countButton: UIButton!
override func viewDidLoad() {
    super.viewDidLoad()

    addLongPressGesture()
}
@IBAction func countAction(_ sender: UIButton) {
    print("Single Tap")
}

@objc func longPress(gesture: UILongPressGestureRecognizer) {
    if gesture.state == UIGestureRecognizerState.began {
        print("Long Press")
    }
}

func addLongPressGesture(){
    let longPress = UILongPressGestureRecognizer(target: self, action: #selector(longPress(gesture:)))
    longPress.minimumPressDuration = 1.5
    self.countButton.addGestureRecognizer(longPress)
}
7eumitmz

7eumitmz3#

为什么不创建一个自定义的UIButton类,创建一个协议,让按钮将信息发送回delegte。就像这样:

//create your button using a factory (it'll be easier of course)
    //For example you could have a variable in the custom class to have a unique identifier, or just use the tag property)

    func createButtonWithInfo(buttonInfo: [String: Any]) -> CustomUIButton {
        let button = UIButton(type: .custom)
        button.tapDelegate = self
        /*
Add gesture recognizers to the button as well as any other info in the buttonInfo

*/
        return button
    }

    func buttonDelegateReceivedTapGestureRecognizerFrom(button: CustomUIButton){
        //Whatever you want to do
    }

相关问题