2016-06-17 11 views
10

Próbuję zaktualizować ten kod do szybkiego 3:Jak napisać informację klawiaturowe w Swift 3

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

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

tej pory, właśnie próbowałem korekt auto podane przez kompilator. Wynika to w kodzie tak:

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)` 

Niestety, nie bierze mnie daleko, powodując dodatkowych błędów.

Czy ktoś to rozwiązał, proszę?

Należy pamiętać, że próbuję tylko pisać powiadomienia. Jestem (jeszcze) nie próbuje naprawić funkcje powiadamiania .. Dzięki

+3

Możliwe duplikat [Swift 3 NSNotificationCenter Keyboardwillshow/ukryć] (http://stackoverflow.com/questions/37825327/swift-3-nsnotificationcenter-keyboardwillshow-hide) –

+0

Nieco inaczej - odnośny pytanie o funkcje pokaż/ukryj klawiaturę. To pytanie dotyczy konfiguracji powiadomień. –

+1

ok daj mi znać, jeśli to nie pomogło –

Odpowiedz

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") 
} 

można również uzyskać Klawiatura Info uisng Poniżej kod wewnątrz Te metody.

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

Dzięki! Właśnie miałem zmienić moje pytanie. –

+0

@DavidDelMonte Most Welcome :) – ZAFAR007

13

można zastąpić przestarzałe ciąg dosłownego Selector z typem sprawdzane #selector(Class.method) pary:

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

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

Składnia #selector jest znacznie bezpieczniejsze, ponieważ Swift jest w stanie sprawdzić podczas kompilacji, czy określona metoda rzeczywiście istnieje.

Aby uzyskać więcej informacji o selektorach Swift, zobacz rickster's detailed answer.

+0

Awesome Właśnie tego użyłem!Notatka boczna na wypadek, gdyby ktokolwiek działał w moim wydaniu: podczas implementacji 'keyboardWillShow' i' keyboardWillHide', nie twórz ich prywatnych funkcji lub będziesz mieć błąd kompilatora. – Sami

24

naprawiłem ten problem poprzez pisanie kodu jak ten

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

Można wykonać powiadomienie klawiatury zarówno wersji Swift odpowiednio.

Dodaj Objserver:

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

funkcja szybkiego połączenia funkcji 3

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

zadzwonić szybkiej 4

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

Dlaczego powinniśmy używać słowa kluczowego @objc do funkcjonowania? czy jest jakiś sposób na czysty, szybki kod dla 4? –

+1

Jako metodę keyboardDidShow wywołaj z Objective C, swift 4 nalegać na dodanie słowa kluczowego @objc przed wywołaniem metody. – Tech

3

w 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 pokazywać i ukrywać

func keyboardWillShow(notification: NSNotification) 
{ 

     // Your Code Here 
} 

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