2015-06-16 7 views
7

Chcę wywołać dwa działania na button click i button long click. Dodałem UIbutton do mojego kreatora interfejsów. Jak mogę wywołać dwie akcje używając IBAction, czy ktoś może mi powiedzieć, jak to zarchiwizować?UIButton z jednym naciśnięciem i długie naciśnięcie wydarzeń szybkich

to kod mam wykorzystywane do przycisku kliknij

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

mogę użyć tej metody, czy też muszę użyć innej metody długim kliknięciem?

+1

Sprawdź ten http://stackoverflow.com/questions/6660282/uibutton-with-longpress-and-touchup-inside –

Odpowiedz

17

Jeśli chcesz wykonywać żadnych operacji na jednym stuknięciem ty i naciśnij długo można dodać gesty na przycisk ten sposób:

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

ten sposób można dodać metodę wielokrotnego za pomocą jednego przycisku i po prostu trzeba Outlet tego przycisku do tego ..

+0

mam wielu przycisków w moim UI ponieważ wszyscy robią to samo to mam je na mapie w tej metodzie ('@IBAction func buttonPressed (Sender: UIButton') i mogę dodać metodę programowo –

+0

Następnie trzeba stworzyć rynek zbytu dla wszystkich przycisku i dodać to gesty w it.and tej metody będzie działać? dla wszystkich przycisków. –

+0

oh mam 30 przycisków w moim ui jego klawiaturę :(Czy jest jakiś sposób, aby zarchiwizować je bez użycia gniazdka? –

0

Dlaczego nie utworzyć niestandardową klasę UIButton utworzyć protokół i niech przycisk odesłać informacji na delegte. Coś takiego:

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