Я получаю эту ошибку в Swift 4.2
Type 'NSNotification.Name' has no member 'keyboardDidShowNotification'
Вот мой код:
NotificationCenter.default.addObserver(self, selector: #selector(self.keyboardDidShow(notification:)), name: NSNotification.Name.keyboardDidShowNotification, object: nil)
Следующий работал нормально со Swift 4, но не со Swift 4.2.
NotificationCenter.default.addObserver(self, selector: #selector(self.keyboardDidShow(notification:)), name: NSNotification.Name.UIKeyboardDidShow, object: nil)
Ссылка на документ Apple: NSNotification.Name.keyboardDidShowNotification
@DonMag - Спасибо за это. Это очень здорово. Но ищите патч / поддержку Swift4.2. Я переношу свой проект полностью.
Конечно ... но суть мог может служить хорошим справочником для подобных изменений синтаксиса. Что касается миграции всего проекта, в Xcode 10 делает есть помощник по миграции, который может помочь. Ссылка: swift.org/migration-guide-swift4.2
Я считаю, что вы сейчас используете это вот так.
NotificationCenter.default.addObserver(
self,
selector: #selector(self.keyboardDidShow(notification:)),
name: UIResponder.keyboardDidShowNotification, object: nil)
/* You can substitute UIResponder with any of it's subclass */
Он указан в UIResponder
док как Тип недвижимости.
Странно, что .keyboardDidShowNotification
обнаружен как в UIWindow
, так и в UIResponder
.
@rmaddy я получил это как предложение от xcode. Но когда я перехожу к документации на страницу уведомления, оно появляется в разделе UIWindow
. : /
Как ни странно, обе версии (UIWindow и UIResponder) компилируются.
@rmaddy, я узнал, почему я так думаю. «Многие ключевые объекты также являются респондентами, включая объект UIApplication, объекты UIViewController и все объекты UIView (которые включает UIWindow)»developer.apple.com/documentation/uikit/uiresponder
.keyboardDidShowNotification
фактически должен быть объявлен в UIResponder
, потому что я могу делать UIView.keyboardDidShowNotification
или любой другой класс, который в конечном итоге происходит от UIResponder
.
Я действительно смущен, почему наблюдатель UIResponder.keyboardWillShowNotification не вызывается. Я использую его внутри KeyboardViewController расширения клавиатуры.
Работаем на swift 4,2
func bindToKeyboard(){
NotificationCenter.default.addObserver(self, selector: #selector(UIView.keyboardWillChange(_:)), name:
UIApplication.keyboardWillChangeFrameNotification
, object: nil)
}
Я использовал только UIResponder.keyboardWillHideNotification
, за исключением NSNotification.Name.
. Это работает в SWIFT 5
NotificationCenter.default.addObserver(self, selector: #selector(KeyboardLayoutConstraint.keyboardWillShowNotification(_:)), name: UIResponder.keyboardWillShowNotification, object: nil)
NotificationCenter.default.addObserver(self, selector: #selector(self.keyboardWillHideNotification(_:)), name: UIResponder.keyboardWillHideNotification, object: nil)
Когда я нажимаю команду keyboardWillShowNotification и выбираю переход к определению.
extension UIResponder {
public class let keyboardWillShowNotification: NSNotification.Name
public class let keyboardDidShowNotification: NSNotification.Name
public class let keyboardWillHideNotification: NSNotification.Name
public class let keyboardDidHideNotification: NSNotification.Name
}
К этому ответу были добавлены некоторые мелкие детали:
func setupViews(){
// Keyboard notification observers
NotificationCenter.default.addObserver(self, selector: #selector(self.keyboardWillShow(notification:)), name: UIResponder.keyboardWillShowNotification, object: nil)
NotificationCenter.default.addObserver(self, selector: #selector(self.keyboardWillHide(notification:)), name: UIResponder.keyboardWillHideNotification, object: nil)
}
@objc func keyboardWillShow(notification: NSNotification) {
if let keyboardSize = (notification.userInfo?[UIResponder.keyboardFrameBeginUserInfoKey] as? NSValue)?.cgRectValue {
// Do something
}
}
@objc func keyboardWillHide(notification: NSNotification) {
// Do something
}
@Krunal .... удалите NSNotification.Name, он будет работать
Это то же решение, что и в этот другой ответ.
Как и в случае с вашим вопросом "типа кнопки" ... @Krunal - это может быть полезно ... (не мое, и я не пробовал ... просто нашел через поиск): gist.github.com/benasher44/de0a75a4583e5f57853998142e795776