UIButton with single press and long press events swift

前端 未结 3 426
南方客
南方客 2020-12-14 19:10

I want to trigger two action on button click and button long click. I have add a UIbutton in my interface builder. How can i trigger t

相关标签:
3条回答
  • 2020-12-14 19:35
    @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)
    }
    
    0 讨论(0)
  • 2020-12-14 19:38

    Why not create a custom UIButton class, create a protocol and let the button send back the info to delegte. Something like this:

        //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
        }
    
    0 讨论(0)
  • 2020-12-14 19:39

    If you want to perform any action with single tap you and long press the you can add gestures into button this way:

    @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")
    }
    

    This way you can add multiple method for single button and you just need Outlet for that button for that..

    0 讨论(0)
提交回复
热议问题