2015-06-16 13 views
7

Ich möchte zwei Aktionen auf button click und button long click auslösen. Ich habe eine UIbutton in meinem Interface Builder hinzugefügt. Wie kann ich zwei Aktionen auslösen mit IBAction kann mir jemand sagen, wie man das archiviert?UIButton mit einzelnen Drücken und lange drücken Ereignisse swift

ist dies der Code i für eine Schaltfläche verwendet haben

klicken

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

kann ich diese Methode verwenden, oder muss ich für lange Klick eine andere Methode verwenden?

+1

prüfen dieses http://stackoverflow.com/questions/6660282/uibutton-with-longpress-and-touchup-inside –

Antwort

17

Wenn Sie eine Aktion mit einzelnen Hahn führen Sie und halten Sie die Sie Gesten in Taste auf diese Weise hinzufügen:

@IBOutlet weak var btn: UIButton! 

override func viewDidLoad() { 

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

func Tap() { 

    println("Tap happend") 
} 

func Long() { 

    println("Long press") 
} 

Auf diese Weise können mehrere Verfahren für einzelne Taste hinzufügen und Sie gerade Outlet brauchen

+0

ich habe mehrere Schaltflächen in meiner ui, da sie alle das gleiche tun dies habe ich ihnen in dieser Methode zugeordnet ('@IBAction func buttonPressed (Absender: UIButton)) und kann ich Methode programmatisch hinzufügen? –

+0

Dann müssen Sie Steckdose für alle Schaltfläche erstellen und fügen Sie diese Gesten hinein.und diese Methode wird funktionieren für alle Knöpfe –

+0

oh ich habe 30 Knöpfe in meinem ui es ist eine Tastatur :(gibt es irgendeine Weise, sie zu archivieren, ohne Steckdose zu benutzen? –

0

Warum nicht eine benutzerdefinierte UIButton-Klasse erstellen, erstellen Sie ein Protokoll und lassen Sie die Schaltfläche senden Sie die Informationen an den Delegierten zurück. Etwas wie folgt aus:

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