Как упомянул @rmaddy в комментарии, это нельзя сделать так, как вы просите.
В этой части
NotificationCenter.default.addObserver(self, selector: #selector(keyboardWillShow(_:constraint:)), name: UIResponder.keyboardWillShowNotification, object: nil)
у вас нет никакого контроля над тем, как именно селектор отправляется (и с какими аргументами).
UIKit внутренне в своей частной реализации делает что-то подобное ( давайте на секунду проигнорируем, что его реализация на самом деле не Swift, это не важно здесь ):
[ 111]
Что означает, что селектор уже отправлен, и нет способа добавить что-то дополнительное в необязательный userInfo (вы могли бы сделать это, если бы .post(...)
произошло в вашем коде, но это ] не случай здесь).
Вам нужен альтернативный способ для доступа к текущему объекту NSLayoutConstraint
внутри обработчиков выбора / скрытия клавиатуры. Возможно, это должно быть свойство в вашем ViewController
, может быть какое-то состояние вашего AppDelegate
или, может быть, что-то совершенно иное, невозможно сказать, не зная остальной части вашего кода.
РЕДАКТИРОВАТЬ: Согласно вашему добавленному комментарию, я предполагаю, что у вас есть что-то вроде этого:
class ViewController: UIViewController {
@IBOutlet var constraint: NSLayoutConstraint?
}
Если это так, вы можете просто получить доступ к ограничению в вашем обработчике селектора внутри VC:
[ 113]
Есть также специальный UIKeyboardWillChangeFrameNotification
, возможно, он может предоставить вам то, что вам нужно из коробки. Смотрите ответ здесь
В то время как на работе, запустите экранную сессию:
$ screen
Сделайте любую работу, которую Вы хотите на терминальном сеансе, и когда Вы уезжаете, чтобы пойти домой, отсоединить сессию путем нажатия CTRL-A затем D. Ваша экранная сессия затем исчезнет. Чтобы повторно активировать его, после того как Вы дома, возобновите сессию с-r опцией:
$ screen -r
Вся Ваша работа появится, поскольку Вы вводите сохраненную экранную сессию.