2016-06-17 2 views
10

Ich versuche, diesen Code zu aktualisieren, um rasche 3 zu schreiben:Wie Keyboard-Benachrichtigungen in Swift 3

NSNotificationCenter.defaultCenter().addObserver(self, selector: Selector("keyboardWillShow:"), name: UIKeyboardWillShowNotification, object: nil) 

    NSNotificationCenter.defaultCenter().addObserver(self, selector: Selector("keyboardWillHide:"), name: UIKeyboardWillHideNotification, object: nil)` 

Bisher habe ich versucht, einfach die automatische Korrekturen durch den Compiler gegeben. Dies ergibt folgenden Code:

Leider dauert das nicht weit, was zu zusätzlichen Fehlern führt.

Hat jemand das bitte gelöst?

Bitte beachten Sie, dass ich gerade versuche, die Benachrichtigungen zu schreiben. Ich bin (noch) nicht versuchen, die Benachrichtigungsfunktionen .. Danke

+3

Mögliche Duplikat [Swift 3 NSNotificationCenter Keyboardwillshow/hide] (http://stackoverflow.com/questions/37825327/swift-3-nsnotificationcenter-keyboardwillshow-hide) –

+0

Ein anderes Bit - die referenzierte Frage ist Die Tastatur zeigt Funktionen an/aus. Diese Frage bezieht sich auf das Benachrichtigungssetup. –

+1

ok lass mich wissen, ob das nicht geholfen hat –

Antwort

2

Swift 4

override func viewDidLoad() { 
    super.viewDidLoad() 
    NotificationCenter.default.addObserver(self, selector: #selector(keyboardWillShow), name: .UIKeyboardWillShow, object: nil) 
    NotificationCenter.default.addObserver(self, selector: #selector(self.keyboardWillHide), name: NSNotification.Name.UIKeyboardWillHide, object: nil) 
} 

func keyboardWillShow(notification: NSNotification) { 
    print("keyboardWillShow") 
} 

func keyboardWillHide(notification: NSNotification){ 
    print("keyboardWillHide") 
} 

Sie bitte auch Keyboard Info uisng Below-Code innerhalb dieser Methoden erhalten.

NotificationCenter.default.addObserver(self, selector: #selector(keyboardWillChange), name: .UIKeyboardWillChangeFrame, object: nil) .  

@objc func keyboardWillChange(notification: NSNotification) { 
    let duration = notification.userInfo![UIKeyboardAnimationDurationUserInfoKey] as! Double 
    let curve = notification.userInfo![UIKeyboardAnimationCurveUserInfoKey] as! UInt 
    let curFrame = (notification.userInfo![UIKeyboardFrameBeginUserInfoKey] as! NSValue).cgRectValue 
    let targetFrame = (notification.userInfo![UIKeyboardFrameEndUserInfoKey] as! NSValue).cgRectValue 
    let deltaY = targetFrame.origin.y - curFrame.origin.y 
} 
+0

Danke! Ich war gerade dabei, meine Frage zu überarbeiten. –

+0

@DavidDelMonte Meiste Begrüßung :) – ZAFAR007

13

Sie zu beheben, können die veraltete Stringliteral Selector mit dem Typ-geprüft #selector(Class.method) Paar ersetzen:

let center = NotificationCenter.default 
center.addObserver(self, 
        selector: #selector(keyboardWillShow(_:)), 
        name: .UIKeyboardWillShow, 
        object: nil) 

center.addObserver(self, 
        selector: #selector(keyboardWillHide(_:)), 
        name: .UIKeyboardWillHide, 
        object: nil) 

Die #selector Syntax ist viel sicherer, Da Swift zur Kompilierzeit prüfen kann, ob die angegebene Methode tatsächlich existiert.

Weitere Informationen zu Swift-Selektoren finden Sie unter rickster's detailed answer.

+0

Ehrfürchtig habe ich das gerade benutzt!Randnotiz für den Fall, dass jemand in meinem Problem läuft: Wenn Sie 'keyboardWillShow' und' keyboardWillHide' implementieren, machen Sie sie nicht zu privaten Funktionen oder Sie haben einen Compilerfehler. – Sami

24

ich dieses Problem behoben, indem Sie den Code wie dies

NotificationCenter.default.addObserver(self, selector: #selector(keyboardWillShow), name: .UIKeyboardWillShow, object: nil) 
1

Schreiben Sie Tastatur Mitteilung jeweils auf beiden Versionen von Swift durchführen können.

Objserver hinzufügen:

NotificationCenter.default.addObserver(self, selector: #selector(keyboardDidShow), name: .UIKeyboardWillShow, object: nil) 

Anruffunktion swift 3

func keyboardDidShow() { 
      print("keyboardDidShow") 
     } 

Anruffunktion in Swift 4

@objc func keyboardDidShow() { 
     print("keyboardDidShow") 
    } 
+0

Warum sollten wir das @objc-Schlüsselwort verwenden, um zu funktionieren? Gibt es irgendeine Art von reinem Swift-Code für 4? –

+1

Wenn die Methode keyboardDidShow aus Objective C aufgerufen wird, besteht swift 4 darauf, dass Sie das Schlüsselwort @objc vor der Aufrufmethode hinzufügen. – Tech

3

In Swift 3,0

override func viewDidLoad() 
    { 
     super.viewDidLoad() 
NotificationCenter.default.addObserver(self, selector: #selector(self.keyboardWillShow), name: NSNotification.Name.UIKeyboardWillShow, object: nil) 
     NotificationCenter.default.addObserver(self, selector: #selector(self.keyboardWillHide), name: NSNotification.Name.UIKeyboardWillHide, object: nil) 

} 

Keybord anzeigen und

func keyboardWillShow(notification: NSNotification) 
{ 

     // Your Code Here 
} 

func keyboardWillHide(notification: NSNotification) 
{ 
    //Your Code Here  
}