Мне нужно переместить макет вверх, когда появляется клавиатура, и текстовое поле не отображается из-за размера клавиатуры.Поэтому я создал это:
var activeField: UITextField!
в моем ViewDidLoad:
let center: NotificationCenter = NotificationCenter.default;
center.addObserver(self, selector: #selector(keyboardWillShow(notification:)), name: UIResponder.keyboardWillShowNotification, object: nil)
center.addObserver(self, selector: #selector(keyboardWillHide(notification:)), name: UIResponder.keyboardWillHideNotification, object: nil)
и вот методы:
func textFieldDidBeginEditing(_ textField: UITextField) {
activeField = textField
}
func textFieldShouldReturn(textField: UITextField) -> Bool {
textField.resignFirstResponder()
return true
}
@objc func keyboardWillShow(notification: Notification) {
let info: NSDictionary = notification.userInfo as! NSDictionary
let keyboardSize = (info[UIResponder.keyboardFrameBeginUserInfoKey] as! NSValue).cgRectValue
let keyboardY = self.view.frame.size.height - keyboardSize.height
let editingTextFieldY: CGFloat = self.activeField.frame.origin.y
if editingTextFieldY > keyboardY - 60 {
UIView.animate(withDuration: 0.25) {
self.view.frame = CGRect(x: 0, y: self.view.frame.origin.y - (editingTextFieldY - (keyboardY-60)), width: self.view.bounds.width, height: self.view.bounds.height)
}
}
}
@objc func keyboardWillHide(notification: Notification) {
UIView.animate(withDuration: 0.25, animations: {
self.view.frame = CGRect(x:0, y:0, width: self.view.bounds.width, height: self.view.bounds.height)
}, completion: nil)
}
ошибка появляется в этой строке:
let editingTextFieldY: CGFloat = self.activeField.frame.origin.y