Xcode 6.3. Innerhalb einer Klasse, die das UITextFieldDelegate-Protokoll implementiert, möchte ich die touchBegan () -Methode überschreiben, um möglicherweise die Tastatur auszublenden. Wenn ich einen Compilerfehler in der Funktionsspezifikation vermeide, gibt es einen kompatiblen Fehler beim Versuch, die "Berührung" aus dem Set oder NSSet zu lesen, oder das super.touchesBegan (Berührungen, mit Ereignis: Ereignis) löst einen Fehler aus. Eine dieser in Xcode 6.2 kompilierten Kombinationen! (Wo ist also die Dokumentation zu Swift "Set" und wie erhält man ein Element aus einem?)
override func touchesBegan(touches: NSSet, withEvent event: UIEvent) {
// Hiding the Keyboard when the User Taps the Background
if let touch = touches.anyObject() as? UITouch {
if nameTF.isFirstResponder() && touch.view != nameTF {
nameTF.resignFirstResponder();
}
}
super.touchesBegan(touches , withEvent:event)
}
Versuchen:
override func touchesBegan(touches: NSSet, withEvent event: UIEvent) or
override func touchesBegan(touches: Set<UITouch>, withEvent event: UIEvent)
Compilerfehler: Überschreibende Methode mit Selektor 'touchBegan: withEvent:' hat inkompatiblen Typ '(NSSet, UIEvent) -> ()' und
super.touchesBegan(touches , withEvent:event)
beschwert sich auch
'NSSet' kann nicht implizit in 'Set' konvertiert werden. Wollten Sie 'as' verwenden, um explizit zu konvertieren?
Versuchen:
override func touchesBegan(touches: Set<AnyObject>, withEvent event: UIEvent)
Compilerfehler: Typ 'AnyObject' entspricht nicht dem Protokoll 'Hashable'
Versuchen:
override func touchesBegan(touches: Set<NSObject>, withEvent event: UIEvent)
Compilerfehler bei
if let touch = touches.anyObject() as? UITouch
'Set' hat kein Mitglied namens 'anyObject', ABER die Funktionsspezifikation und der Aufruf von super () sind OK!
Versuchen:
override func touchesBegan(touches: NSSet<AnyObject>, withEvent event: UIEvent) -> () or
override func touchesBegan(touches: NSSet<NSObject>, withEvent event: UIEvent)
Compilerfehler: Nicht generischer Typ 'NSSet' kann nicht spezialisiert werden.
quelle
super.touchesBegan(touches , withEvent:event)
ist das nötig? Ich verstehe Swift immer noch nicht sehr gut.Verwenden Sie mit xCode 7 und Swift 2.0 den folgenden Code:
override func touchesBegan(touches: Set<UITouch>, withEvent event: UIEvent?) { if let touch = touches.first{ print("\(touch)") } super.touchesBegan(touches, withEvent: event) } override func touchesEnded(touches: Set<UITouch>, withEvent event: UIEvent?) { if let touch = touches.first{ print("\(touch)") } super.touchesEnded(touches, withEvent: event) } override func touchesMoved(touches: Set<UITouch>, withEvent event: UIEvent?) { if let touch = touches.first{ print("\(touch)") } super.touchesMoved(touches, withEvent: event) }
quelle
touchesBegan
Funktion. Ich habe versucht, vonUIGestureRecognizer
und zu unterklassifizierenUTapGestureRecognizer
. Xcode 7.1Verwenden von Swift 3 und Xcode 8
override func touchesBegan(_ touches: Set<UITouch>, with event: UIEvent?) { } override func touchesMoved(_ touches: Set<UITouch>, with event: UIEvent?) { } override func touchesEnded(_ touches: Set<UITouch>, with event: UIEvent?) { } override func touchesCancelled(_ touches: Set<UITouch>?, with event: UIEvent?) { // Don't forget to add "?" after Set<UITouch> }
quelle
Es befindet sich jetzt in der Apple API-Referenz hier und zum Überschreiben in xCode Version 6.3 und Swift 1.2 können Sie diesen Code verwenden:
override func touchesBegan(touches: Set<NSObject>, withEvent event: UIEvent) { if let touch = touches.first as? UITouch { // ... } // ... }
quelle
Das aktuelle Update für das neueste Update ab xCode 7.2 Swift 2.1 am 19. Dezember 2015.
Wenn Sie das nächste Mal eine solche Fehlermeldung erhalten, entfernen Sie die Funktion und geben Sie sie erneut ein. "TouchBe ...". XCode sollte sie automatisch auf die neueste für Sie vervollständigen, anstatt zu versuchen, die alte zu beheben.
override func touchesMoved(touches: Set<UITouch>, withEvent event: UIEvent?) { for touch: AnyObject! in touches { let touchLocation = touch.locationInNode(self) //Use touchLocation for example: button.containsPoint(touchLocation) meaning the user has pressed the button. } }
quelle
Was für mich funktioniert hat war:
override func touchesBegan(touches: Set<NSObject>, withEvent event: UIEvent) { if let touch = touches.first as? UITouch { // ... } super.touchesBegan(touches , withEvent:event!) }
quelle
Kleine Ergänzung. Damit Sie schnell und ohne Fehler kompilieren können, müssen Sie hinzufügen
Importieren Sie UIKit.UIGestureRecognizerSubclass
quelle
Verwenden von Swift 4 und Xcode 9
override func touchesBegan(_ touches: Set<UITouch>, with event: UIEvent?) { }
quelle
override func touchesBegan(_ touches: Set<UITouch>, with event: UIEvent?) { if let touch = touches.first as? UITouch { if touch.view == self.view{ self.dismiss(animated: true, completion: nil) } } }
quelle