У меня есть два текстовых поля, topTextField и bottomTextField, вверху и внизу экрана соответственно. bottomTextField прячется за виртуальной клавиатурой, когда она появляется, поэтому, чтобы исправить это, я использую NSNotification для прослушивания виртуальной клавиатуры и сдвигаю представление вверх, когда это происходит. Однако представление перемещается вверх всякий раз, когда клавиатура появляется на экране, в том числе, когда topTextField становится первым ответчиком, эффективно перемещая его за пределы экрана. Вот код:
func subscribeToKeyboardNotifications() {
NSNotificationCenter.defaultCenter().addObserver(self, selector: "keyboardWillShow:", name: UIKeyboardWillShowNotification, object: bottomTextField)
NSNotificationCenter.defaultCenter().addObserver(self, selector: "keyboardWillHide:", name: UIKeyboardWillHideNotification, object: bottomTextField)
}
func unsubscribeToKeyboardNotifications() {
NSNotificationCenter.defaultCenter().removeObserver(self, name: UIKeyboardWillShowNotification, object: bottomTextField)
NSNotificationCenter.defaultCenter().removeObserver(self, name: UIKeyboardWillHideNotification, object: bottomTextField)
}
Первоначально у меня был nil в качестве параметра объекта в конце методов, и именно тогда я начал искать способ изолировать поведение только от bottomTextField.
Я предполагаю, что ключ к решению этой проблемы находится в параметре объекта в этих методах, где я сейчас передаю значение bottomTextField. в документации Apple для NSNotificationCenter говорится, что этот параметр предназначен для
Объект, чьи уведомления хочет получать наблюдатель; то есть наблюдателю доставляются только уведомления, отправленные этим отправителем.
Если вы передадите nil, центр уведомлений не будет использовать отправителя уведомления, чтобы решить, доставлять ли его наблюдателю.
Я интерпретирую это как то, что мы можем вызывать конкретный объект для прослушивания, поэтому в данном случае bottomTextField. Однако, когда я изменил их с nil на bottomTextField, представление больше не скользит вверх, а bottomTextField по-прежнему скрыт. Я неправильно интерпретирую это? Если нет, что я могу сделать, чтобы заставить это работать? И если я не прав, есть ли способ изолировать один объект для прослушивания с помощью NSNotification?