it-swarm.com.de

UIButton mit einmaligem Drücken und langen Presseereignissen schnell

Ich möchte zwei Aktionen für button click und button long click auslösen. Ich habe eine UIbutton in meinem Interface Builder hinzugefügt. Wie kann ich mit IBAction zwei Aktionen auslösen? Kann mir jemand sagen, wie ich dies archivieren soll?

dies ist der Code, den ich für einen Klick verwendet habe 

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

kann ich diese Methode verwenden oder muss ich eine andere Methode für einen langen Klick verwenden?

11
Kamal Upasena

Wenn Sie eine Aktion mit einem einzigen Tastendruck ausführen möchten, können Sie Gesten in die Schaltfläche hinzufügen:

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

Auf diese Weise können Sie mehrere Methoden für eine einzelne Schaltfläche hinzufügen, und Sie benötigen nur ein Auslass für diese Schaltfläche.

27
Dharmesh
@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)
}
3
Murad Al Wajed

Warum nicht eine benutzerdefinierte UIButton-Klasse erstellen, ein Protokoll erstellen und die Schaltfläche die Informationen an delegte zurücksenden. Etwas wie das: 

    //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
Septronic