Не получил Observer Swift из Центра уведомлений - PullRequest
0 голосов
/ 16 июня 2020

Здесь я создал customView: UIView и реализовал UITextField didBegin и didEnd notificationObservers

При установке объекта как nil. Я получаю срабатывающее уведомлениеObserved (_:)

Но когда я передаю ( объект: self ) Я не получил уведомлениеObserved.

class CustomView: UIView {
  func setupView() {

        [UITextField.textDidBeginEditingNotification,
         UITextField.textDidEndEditingNotification].forEach({

            NotificationCenter.default.addObserver(self, selector: #selector(notificationObserved(_:)), name: $0, object: self)
         })
    }

 @objc func notificationObserved(_ notified: Notification) {

        switch notified.name {
        case UITextField.textDidBeginEditingNotification:
                // Do here

        case UITextField.textDidEndEditingNotification:
               // Do here
        default:
            break
        }
    }
}

1 Ответ

1 голос
/ 16 июня 2020

Это действительно ожидаемое поведение. Параметр object в методе addObserver(_,selector:,name:,object:), как указано в документации разработчика (здесь), , «Объект, который отправляет уведомления наблюдателю».

Поскольку объект, отправляющий уведомление, - это UITextField, а не экземпляр вашего класса CustomView, вы никогда не получите уведомление, если передадите self в параметре object.

Передача nil означает, что независимо от отправителя вы всегда хотите получать уведомление.

...