2016-06-17 2 views
10

Я пытаюсь обновить этот код быстрого 3:Как написать уведомление клавиатуры в Swift 3

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

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

До сих пор, я просто попытался поправки авто приведенных компилятором. Результатом этого является код:

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

К сожалению, это не заводит меня далеко, что приводит к дополнительным ошибкам.

Кто-нибудь решил это, пожалуйста?

Обратите внимание, что я просто пытаюсь написать уведомления. Я (пока) не пытается исправить функции уведомления .. спасибо

+3

Возможный дубликат [Swift 3 NSNotificationCenter Keyboardwillshow/скрыть] (http://stackoverflow.com/questions/37825327/swift-3-nsnotificationcenter-keyboardwillshow-hide) –

+0

немного по-другому - ссылочный речь идет о клавиатура показывает/скрывает функции. Этот вопрос касается настройки уведомлений. –

+1

ok дайте мне знать, если это не помогло –

ответ

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

Вы также можете получить с клавиатуры информация Uisng ниже код внутри этих методов.

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

Спасибо! Я собирался пересмотреть свой вопрос. –

+0

@DavidDelMonte Добро пожаловать :) – ZAFAR007

13

Вы можете заменить устаревшее строковый литерал Selector с типом проверил #selector(Class.method) пары:

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

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

Синтаксис #selector намного безопаснее, так как Swift может проверить во время компиляции, что указанный метод действительно существует.

Для получения дополнительной информации о селекторах Swift см. rickster's detailed answer.

+0

Awesome Я просто использовал это!Обратите внимание, что в случае, если кто-то работает в моей проблеме: при внедрении 'keyboardWillShow' и' keyboardWillHide', не делайте их частными функциями или у вас будет ошибка компилятора. – Sami

24

Я исправил эту проблему путем написания кода, как этот

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

Вы можете выполнить уведомление клавиатуры по обе версии Swift соответственно.

Добавить Objserver:

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

Вызов функции быстрого функции 3

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

вызовов В быстром 4

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

Почему мы должны использовать ключевое слово @objc для работы? есть ли способ чистого быстрого кода для 4? –

+1

Как метод keyboardDidShow вызывается из Objective C, swift 4 настаивает на том, чтобы добавить ключевое слово @objc перед вызовом метода. – Tech

3

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

} 

же раскладке Показать и скрыть

func keyboardWillShow(notification: NSNotification) 
{ 

     // Your Code Here 
} 

func keyboardWillHide(notification: NSNotification) 
{ 
    //Your Code Here  
} 
Смежные вопросы