it-swarm.com.de

So schreiben Sie Tastaturbenachrichtigungen in Swift 3

Ich versuche, diesen Code auf Swift 3 zu aktualisieren:

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 gerade die Autokorrekturen des Compilers ausprobiert. Dies führt zu Code wie folgt:

let notificationCenter = NotificationCenter.default()
notificationCenter.addObserver(self, selector: Selector(("keyboardWillShow:")), name: NSNotification.Name.UIKeyboardWillShow, object: nil)

notificationCenter.addObserver(self, selector: Selector(("keyboardWillHide:")), name: NSNotification.Name.UIKeyboardWillHide, object: nil)`

Das bringt mich leider 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 versuche (noch) nicht, die Benachrichtigungsfunktionen zu korrigieren. Danke

15
David DelMonte

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 können auch Tastaturinformationen erhalten, indem Sie den folgenden Code in diesen Methoden verwenden.

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
 }
21
ZAFAR007

Ich habe dieses Problem behoben, indem ich den Code so geschrieben habe

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

Swift 4.2 Xcode 10 (10L213o)

Die wichtigsten Änderungen gegenüber Swift 3 betreffen UIWindow. keyboardWillShowNotification und UIWindow.keyboardWillShowNotification

let notifier = NotificationCenter.default
notifier.addObserver(self,
                     selector: #selector(KeyboardLayoutConstraint.keyboardWillShowNotification(_:)),
                     name: UIWindow.keyboardWillShowNotification,
                     object: nil)
notifier.addObserver(self,
                     selector: #selector(KeyboardLayoutConstraint.keyboardWillHideNotification(_:)),
                     name: UIWindow.keyboardWillHideNotification,
                     object: nil)


@objc
func keyboardWillShowNotification(_ notification: NSNotification) {}

@objc
func keyboardWillHideNotification(_ notification: NSNotification) {}
20
fssilva

Für Swift 4.2 wird __..UIKeyboardWillShow in UIResponder.keyboardWillShowNotification.__ umbenannt und .UIKeyboardWillHide wird in UIResponder.keyboardWillHideNotification umbenannt.

 NotificationCenter.default.addObserver(self, selector: #selector(NameOfSelector), name: UIResponder.keyboardWillShowNotification , object: nil)
 NotificationCenter.default.addObserver(self, selector: #selector(NameOfSelector), name: UIResponder.keyboardWillHideNotification , object: nil)

   @objc func NameOfSelector() {
       //Actions when notification is received
    }
14

Sie können das veraltete Stringliteral Selector durch das typgeprüfte #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 wesentlich sicherer, da Swift zur Kompilierzeit überprüfen kann, ob die angegebene Methode tatsächlich vorhanden ist.

Weitere Informationen zu den Swift-Selektoren finden Sie in der ausführlichen Antwort von rickster .

13
user4151918

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)

}

Tastatur zeigen und ausblenden

func keyboardWillShow(notification: NSNotification) 
{

      // Your Code Here
}

func keyboardWillHide(notification: NSNotification)
{  
   //Your Code Here     
}
3
Rob-4608
  NotificationCenter.default.addObserver(self, selector: Selector(("keyboardWillShow:")), name:UIResponder.keyboardWillShowNotification, object: nil);
    NotificationCenter.default.addObserver(self, selector: Selector(("keyboardWillHide:")), name:UIResponder.keyboardWillHideNotification, object: nil);
1
SCS

Sie können jeweils eine Tastaturbenachrichtigung für beide Versionen von Swift durchführen.

Objserver hinzufügen:

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

Aufruf der Funktion Swift 3

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

Funktion aufrufen In Swift 4

@objc func keyboardDidShow() {
      print("keyboardDidShow")
   }
1
Tech

Bitte schauen Sie unter https://stackoverflow.com/a/57430207/2885792 . Wenn es mit dem UITextField zusammenhängt und Sie nicht in der Lage sind, eine Lösung zu finden, obwohl Sie die Beobachter korrekt hinzugefügt und entfernt haben.

0
Rohit saraf