После игры в iPad в течение часа у меня, наконец, есть хорошее решение для этого быстро. Другие методы слабы или используют стороннее программное обеспечение. Причина, по которой UIKeyboardWillShowNotification
запускается, даже когда внешняя клавиатура используется для iPad, является уже существующей панелью быстрого доступа. Для того, чтобы отключить панель быстрого доступа, выполните следующие действия:
let item : UITextInputAssistantItem = textField.inputAssistantItem
item.leadingBarButtonGroups = []
item.trailingBarButtonGroups = []
Это охватывает большинство случаев, что вам нужно, но UIKeyboardWillShowNotification
все еще может быть уволен, если кто-то подключается их клавиатуры в некоторых точках использования. Если вы настроите экран, вы не можете позволить себе какое-либо дело для пользователя, чтобы испытать это. Кроме того, по какой-то причине вам может понадобиться панель быстрого доступа. Независимо от того, что ваши желания, это охватывает все случаи внешней клавиатуры используются:
Добавить в viewDidAppear
NSNotificationCenter.defaultCenter().addObserver(self, selector: #selector(LoginViewController.keyboardWillShow), name: UIKeyboardWillShowNotification, object: nil)
NSNotificationCenter.defaultCenter().addObserver(self, selector: #selector(LoginViewController.keyboardWillHide), name: UIKeyboardWillHideNotification, object: nil)
всякий раз, когда вы оставить мнение добавить это к чему-либо, что заставляет вас оставить
NSNotificationCenter.defaultCenter().removeObserver(self, name: UIKeyboardWillShowNotification, object: nil)
NSNotificationCenter.defaultCenter().removeObserver(self, name: UIKeyboardWillHideNotification, object: nil)
также добавьте его в метод deinit{}
.
Теперь использовать эти функции:
func keyboardWillShow(notification: NSNotification) {
// This code is an alternate way of checking for keyboard
var userInfo: [NSObject: AnyObject] = notification.userInfo!
let firstFrame = userInfo[UIKeyboardFrameBeginUserInfoKey] as! NSValue
let secondFrame = userInfo[UIKeyboardFrameEndUserInfoKey] as! NSValue
let firstRect = firstFrame.CGRectValue()
let secondRect = secondFrame.CGRectValue()
let diff = abs(firstRect.origin.y - secondRect.origin.y)
let isFirstBigger = firstRect.origin.y > secondRect.origin.y
if firstRect != secondRect && diff != 55 {
if !isFirstBigger {
//animateViewToDefaultPosition()
} else {
//animateViewToPositionWhenKeyboardActive()
}
}
}
func keyboardWillHide() {
//animateViewToDefaultPosition()
}
55 является высота панели быстрого доступа. Вы можете удалить его функциональность, если у вас его нет. !isFirstBigger
используется для проверки того, когда они отцепляются от клавиатуры и подключают его обратно во время редактирования текстового поля. Также важно, чтобы во время этой проверки diff != 55
, потому что с помощью сочетания клавиш это было бы так, когда вы не хотели бы анимировать экран.
Это, безусловно, лучший метод, который я видел после очистки стека. Если кто-нибудь найдет ошибку в функциональности, сообщите мне, но я уверен, что он позаботится о том, что проблемы с клавиатурой на клавиатуре быстрого доступа отключены. Надеюсь, это поможет всем остальным смутить все это!