2016-07-25 12 views
1

Ich habe einige Probleme, meine Tippgeste zu arbeiten, wenn mein Code in Klassen aufgeteilt ist. Ich hatte das alles früher in einer Datei enthalten und es funktionierte reibungslos, so ich nehme an, ich habe etwas falsch gemacht in dem folgenden Code:Swift: tippen Geste nicht erkannt

placeContainerView.userInteractionEnabled = true 

let showFullPlaceContainerView = UITapGestureRecognizer(target: self, action: Selector(self.showFullPlaceContainerViewFunction(placeContainerView))) 
placeContainerView.addGestureRecognizer(showFullPlaceContainerView) 

, wo die Funktion showFullContainerViewFunction(placeContainerView)

func showFullPlaceContainerViewFunction(placeContainerView: PlaceContainerView) { 
    placeContainerView.animateExpandContractContainer() 
} 

und

func animateExpandContractContainer() { 
    print("Tap gesture working") 
    if self.displayingPlaceLabel == false { 
     print(self.displayingPlaceLabel) 
     self.displayingPlaceLabel = true 

     UIView.animateWithDuration(0.4, delay: 0.0, options: [], animations: { 
      self.center.x += 180 
      }, completion: nil) 
    } else { 
     self.displayingPlaceLabel = false 
     UIView.animateWithDuration(0.4, delay: 0.0, options: [], animations: { 
      self.center.x -= 180 
      }, completion: nil) 
    } 

} 

Irgendwie erkennt die placeContainerView die Taps nicht und gibt beim Klicken keine print-Anweisungen zurück.

Irgendwelche Ideen? Danke für Ihre Hilfe!

+1

Ich bin nicht sicher, wie, aber Selektoren '#selector (className.methodName)' sollte keine Parameter haben. So etwas ist falsch mit dieser http://stackoverflow.com/questions/32085396/using-parameters-in-action-of-uitapgesture_recognizer-in-swift – impression7vx

+1

Ich denke, dass Ihr Selektor falsch ist. Es sollte '#selector (Classname.showFullPlaceContainerViewFunction (_ :))' statt 'Selector (self.showFullPlaceContainerViewFunction (placeContainerView))' – RJE

+0

@RJE Ich habe es ersetzt, wie Sie gesagt haben, und der Code gibt keine Fehler, aber wann Ich führe es aus und versuche, die "placeContainerView" zu tippen Ich erhalte eine Fehlermeldung, wo der animateExpandContractContainer aufgerufen wird - Thread 1: EXC_BAD_ACCESS – tryingtolearn

Antwort

1

Geänderte Selector Syntax wie Sie vorgeschlagen

let showFullPlaceContainerView = UITapGestureRecognizer(target: self, action: #selector(self.showFullPlaceContainerViewFunction(_:))) 
placeContainerView.addGestureRecognizer(showFullPlaceContainerView) 

Ihre Methode wie diese

wird
func showFullPlaceContainerViewFunction(recognizer: UITapGestureRecognizer) { 
    let placeContainerView = recognizer.view as! PlaceContainerView 
    placeContainerView.animateExpandContractContainer() 
} 
+0

Ich musste den RJE-Vorschlag für den Selector verwenden, aber das funktionierte. – tryingtolearn

+1

Willkommen Kumpel glücklich Codierung :) –

+0

Danke Mann! Können Sie mir erklären, wie ich Recognizer als eine andere Klasse einsetzen kann? Der Gedanke kam mir nie in den Sinn. Nimmt UITapGestureRecognizer nur das Objekt ab, das angezapft wurde? – tryingtolearn

2

Blick auf PlaceContainerViews und seine Superview Frame und userInteractionEnable.

0

Wo ist der Parameter der erwarteten Funktion?

placeContainerView.userInteractionEnabled = true 
let showFullPlaceContainerView = UITapGestureRecognizer(target: self, action: #selector(YourViewController.yourFunction(_:)) 
placeContainerView.addGestureRecognizer(showFullPlaceContainerView) 

Ihre erwartete Funktion sollte wie folgt sein:

func yourFunction(tapGestureRecognizer:UITapGestureRecognizer) { 
    // Do something 
} 
Verwandte Themen