У меня есть два текстовых поля внутри subview, и я пытаюсь переместить subview вверх, когда появляется любое текстовое поле, щелкнутое внутри subview и клавиатуры. Проблема заключается в том, что subview движется вниз, когда subview поднят, и я нажал на второе текстовое поле. Он должен скрываться, когда я касаюсь любого вида, кроме текстовых полей.
Определение моего двух текстовых полей и подсмотра;
@IBOutlet weak var emailTextField: UITextField!
@IBOutlet weak var passwordTextField: UITextField!
@IBOutlet weak var loginView: UIView!
Код в viewDidLoad
NotificationCenter.default.addObserver(self, selector:#selector(keyboardWillShow), name: .UIKeyboardWillShow, object: nil)
NotificationCenter.default.addObserver(self, selector:#selector(keyboardWillHide), name: .UIKeyboardWillShow, object: nil)
И еще две функции, которые показывают и скрывают клавиатуру
func keyboardWillShow(notification: NSNotification) {
if let keyboardSize = (notification.userInfo?[UIKeyboardFrameBeginUserInfoKey] as? NSValue)?.cgRectValue {
if loginView.frame.origin.y == 0{
let height = keyboardSize.height
self.loginView.frame.origin.y += height
}
}
}
func keyboardWillHide(notification: NSNotification) {
if let keyboardSize = (notification.userInfo?[UIKeyboardFrameBeginUserInfoKey] as? NSValue)?.cgRectValue {
if loginView.frame.origin.y != 0 {
let height = keyboardSize.height
self.loginView.frame.origin.y -= height
}
}
}
Я хотел бы знать, как я могу избежать subview вниз, когда я нажимаю текстовое поле, когда подвью вверх.
Просто сделайте y-origin представления равным нулю, когда клавиатура опущена. Когда вы нажимаете другой текстовый экран, пока клавиатура открыта, это так. func keyboardWillHide (уведомление: NSNotification) {
func keyboardWillShow(notification: NSNotification) {
if let keyboardSize = (notification.userInfo?[UIKeyboardFrameBeginUserInfoKey] as? NSValue)?.cgRectValue {
if loginView.frame.origin.y == 0{
let height = keyboardSize.height
self.loginView.frame.origin.y = -height
}
}
}
if let keyboardSize = (notification.userInfo?[UIKeyboardFrameBeginUserInfoKey] as? NSValue)?.cgRectValue {
if loginView.frame.origin.y != 0 {
let height = keyboardSize.height
self.loginView.frame.origin.y = 0
}
}
}