Тип 'NSNotification.Name' не имеет члена 'keyboardDidShowNotification'

Я получаю эту ошибку в 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)

Тип 'NSNotification.Name' не имеет члена 'keyboardDidShowNotification'

Ссылка на документ Apple: NSNotification.Name.keyboardDidShowNotification

Как и в случае с вашим вопросом "типа кнопки" ... @Krunal - это может быть полезно ... (не мое, и я не пробовал ... просто нашел через поиск): gist.github.com/benasher44/de0a75a4583e5f57853998142e795776

DonMag 13.09.2018 17:15

@DonMag - Спасибо за это. Это очень здорово. Но ищите патч / поддержку Swift4.2. Я переношу свой проект полностью.

Krunal 13.09.2018 17:20

Конечно ... но суть мог может служить хорошим справочником для подобных изменений синтаксиса. Что касается миграции всего проекта, в Xcode 10 делает есть помощник по миграции, который может помочь. Ссылка: swift.org/migration-guide-swift4.2

DonMag 13.09.2018 18:08
Стоит ли изучать PHP в 2023-2024 годах?
Стоит ли изучать PHP в 2023-2024 годах?
Привет всем, сегодня я хочу высказать свои соображения по поводу вопроса, который я уже много раз получал в своем сообществе: "Стоит ли изучать PHP в...
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Приемы CSS-макетирования - floats и Flexbox
Приемы CSS-макетирования - floats и Flexbox
Здравствуйте, друзья-студенты! Готовы совершенствовать свои навыки веб-дизайна? Сегодня в нашем путешествии мы рассмотрим приемы CSS-верстки - в...
Тестирование функциональных ngrx-эффектов в Angular 16 с помощью Jest
В системе управления состояниями ngrx, совместимой с Angular 16, появились функциональные эффекты. Это здорово и делает код определенно легче для...
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
28
3
30 184
5
Перейти к ответу Данный вопрос помечен как решенный

Ответы 5

Ответ принят как подходящий

Я считаю, что вы сейчас используете это вот так.

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 14.09.2018 07:48

@rmaddy я получил это как предложение от xcode. Но когда я перехожу к документации на страницу уведомления, оно появляется в разделе UIWindow. : /

Rakesha Shastri 14.09.2018 07:49

Как ни странно, обе версии (UIWindow и UIResponder) компилируются.

rmaddy 14.09.2018 07:50

@rmaddy, я узнал, почему я так думаю. «Многие ключевые объекты также являются респондентами, включая объект UIApplication, объекты UIViewController и все объекты UIView (которые включает UIWindowdeveloper.apple.com/documentation/uikit/uiresponder

Rakesha Shastri 14.09.2018 07:50
.keyboardDidShowNotification фактически должен быть объявлен в UIResponder, потому что я могу делать UIView.keyboardDidShowNotification или любой другой класс, который в конечном итоге происходит от UIResponder.
rmaddy 14.09.2018 07:53

Я действительно смущен, почему наблюдатель UIResponder.keyboardWillShowNotification не вызывается. Я использую его внутри KeyboardViewController расширения клавиатуры.

Amit Verma 28.12.2019 02:03

Работаем на 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, он будет работать

Это то же решение, что и в этот другой ответ.

Eric Aya 20.07.2021 11:57

Другие вопросы по теме