У меня есть viewcontroler с 2 текстовыми полями и 1 текстовым окном. Я хочу переместить представление вверх, но только если выбрано текстовое представление, а не текстовые поля. В моем текущем коде следующее работает как задумано:
• вид остается на месте, если вы щелкаете по текстовому полю • вид перемещается вверх, если вы щелкаете в текстовом окне до того, как когда-либо нажимали на текстовое поле • вид перемещается вниз, если щелкнуть из текстового поля в текстовое поле
, но
• представление не перемещается вверх, если вы щелкаете из текстового поля в текстовое
class ViewController: UIViewController, UITextFieldDelegate, UITextViewDelegate {
var textview = true
func textFieldDidBeginEditing(_ textField: UITextField) {
textview = false
view.frame.origin.y = 0
}
func textViewDidBeginEditing(_ textView: UITextView) {
textview = true
**view.frame.origin.y = -keyboardRectAS.height + (view.frame.size.height - self.speichern.frame.size.height - self.speichern.frame.origin.y) - 10**
}
**var keyboardRectAS = CGRect()**
@objc func keyboardWillChange (notification: Notification){
guard let keyboardRect = (notification.userInfo?[UIKeyboardFrameEndUserInfoKey] as? NSValue)?.cgRectValue else {
return
}
**keyboardRectAS = keyboardRect**
if notification.name == Notification.Name.UIKeyboardWillShow || notification.name == Notification.Name.UIKeyboardWillChangeFrame {
if self.textview == true {
view.frame.origin.y = -keyboardRect.height + (view.frame.size.height - self.speichern.frame.size.height - self.speichern.frame.origin.y) - 10
self.textview = false
}
}
else {
view.frame.origin.y = 0
}
}
override func viewDidLoad() {
textfield1.delegate = self
textfield2.delegate = self
textview.delegate = self
NotificationCenter.default.addObserver(self, selector: #selector(keyboardWillChange(notification:)), name: NSNotification.Name.UIKeyboardWillShow, object: nil)
NotificationCenter.default.addObserver(self, selector: #selector(keyboardWillChange(notification:)), name: NSNotification.Name.UIKeyboardWillHide, object: nil)
NotificationCenter.default.addObserver(self, selector: #selector(keyboardWillChange(notification:)), name: NSNotification.Name.UIKeyboardWillChangeFrame, object: nil)
}
}