it-swarm.com.ru

UIB кнопка с одним нажатием и долгим нажатием событий Swift

Я хочу вызвать два действия на button click и button long click. Я добавил UIbutton в мой конструктор интерфейса. Как я могу запустить два действия, используя IBAction, может кто-нибудь сказать мне, как заархивировать это?

это код, который я использовал для нажатия кнопки 

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

могу ли я использовать этот метод или мне нужно использовать другой метод для длинного щелчка?

11
Kamal Upasena

Если вы хотите выполнить какое-либо действие одним нажатием и продолжительным нажатием, вы можете добавить жесты в кнопку следующим образом:

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

Таким образом, вы можете добавить несколько методов для одной кнопки, и вам просто нужен выход для этой кнопки для этого ..

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

Почему бы не создать пользовательский класс UIButton, создать протокол и позволить кнопке отправить информацию обратно делегату. Что-то вроде этого: 

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