[ios] Come chiamare gesti tocca UIView a livello di codice in modo rapido


Answers

Per chiunque stia cercando la soluzione Swift 3

let tap = UITapGestureRecognizer(target: self, action: #selector(self.handleTap(_:)))

view.addGestureRecognizer(tap)

view.isUserInteractionEnabled = true

self.view.addSubview(view)

// function which is triggered when handleTap is called
 func handleTap(_ sender: UITapGestureRecognizer) {
     print("Hello World")
  }
Question

Ho un UIView e ho aggiunto il gesto del tocco ad esso:

let tap = UITapGestureRecognizer(target: self, action: Selector("handleTap:"))
tap.delegate = self
myView.addGesture(tap)

Sto provando a chiamarlo programmaticamente nel file di prova.

sendActionForEvent

Sto usando questa funzione, ma non funziona:

myView.sendActionForEvent(UIEvents.touchUpDown)

Mostra selettore non riconosciuto inviato all'istanza.

Come posso risolvere questo problema?

Grazie in anticipo




Attuazione del gesto di tocco

let tap: UITapGestureRecognizer = UITapGestureRecognizer(target: self, action: "touchHappen") 
view.userInteractionEnabled = true
view.addGestureRecognizer(tap)

Chiama questa funzione quando viene riconosciuto il tocco.

func touchHappen() {
    //Causes the view (or one of its embedded text fields) to resign the first responder status.
    self.view.endEditing(true)
}

Aggiornamento per Swift 3

let tap = UITapGestureRecognizer(target: self, action: #selector(self.touchHappen(_:)))
view.addGestureRecognizer(tap)
view.userInteractionEnabled = true

func touchHappen(_ sender: UITapGestureRecognizer) {
    print("Hello Museer")
}



Ho lavorato su Xcode 6.4 su swift. Vedi sotto.

var view1: UIView!

func assignTapToView1() {          
  let tap = UITapGestureRecognizer(target: self, action: Selector("handleTap"))
  //  tap.delegate = self
  view1.addGestureRecognizer(tap)
  self.view .addSubview(view1)

...
}

func handleTap() {
 print("tap working")
 view1.removeFromSuperview()
 // view1.alpha = 0.1
}



Se si desidera che il codice Objective C sia riportato di seguito,

UITapGestureRecognizer *gesRecognizer = [[UITapGestureRecognizer alloc] initWithTarget:self action:@selector(handleTap:)]; // Declare the Gesture.
gesRecognizer.delegate = self;
[yourView addGestureRecognizer:gesRecognizer]; // Add Gesture to your view.

// Declare the Gesture Recognizer handler method.

- (void)handleTap:(UITapGestureRecognizer *)gestureRecognizer{
   NSLog(@"Tapped");
}

o vuoi il codice rapido è indicato di seguito,

import UIKit
class ViewController: UIViewController {

    @IBOutlet weak var myView: UIView!

    override func viewDidLoad() {
        super.viewDidLoad()

        // Add tap gesture recognizer to view
        let tapGesture = UITapGestureRecognizer(target: self, action: Selector("handleTap:"))
        myView.addGestureRecognizer(tapGesture)
    }

    // this method is called when a tap is recognized
    func handleTap(sender: UITapGestureRecognizer) {

        print("tap")
    }
}



Volevo specificare due punti che mi hanno causato problemi.

  • Stavo creando Gesture Recognizer su init e memorizzandolo in una proprietà let. Apparentemente, aggiungere questo gesto alla vista non funziona. Può essere oggetto auto passato al riconoscimento di gesture durante init, non è configurato correttamente.
  • Il riconoscitore di gesti non dovrebbe essere aggiunto alle viste con zero fotogrammi. Creo tutte le mie viste con zero frame e poi le ridimensiono usando l'autolayout. I riconoscitori di gesti devono essere aggiunti DOPO che le visualizzazioni sono state ridimensionate dal motore di autolayout. Quindi aggiungo il riconoscitore di gesti in viewDidAppear e funzionano.



Per Swift 4 :

let tap = UITapGestureRecognizer(target: self, action: #selector(self.handleTap(_:)))

view.addGestureRecognizer(tap)

view.isUserInteractionEnabled = true

self.view.addSubview(view)

// function which is triggered when handleTap is called
@objc func handleTap(_ sender: UITapGestureRecognizer) {
    print("Hello World")
}

In Swift 4, devi indicare esplicitamente che la funzione attivata è richiamabile da Objective-C, quindi devi aggiungere anche @objc alla tua funzione handleTap.

Vedi la risposta di @Ali Beadle qui: Swift 4 aggiunge gesture: override vs @objc




Swift 4

let tap = UITapGestureRecognizer(target: self, action: #selector(self.touchTapped(_:)))
    self.view.addGestureRecognizer(tap)

@objc func touchTapped(_ sender: UITapGestureRecognizer) {
}



Ho lavorato su Xcode 7.3.1 su Swift 2.2. Vedi sotto.

func addTapGesture() {
    let tap = UITapGestureRecognizer(target: self, action: #selector(MyViewController.handleTap))
    tap.numberOfTapsRequired = 1
    self.myView.addGestureRecognizer(tap)
}

func handleTap() {
    // Your code here...
}



Related