[当我按下PassTextField文本字段时,视图按预期方式上升(self.view.frame.origin.y-= 100),然后我按下IDTextField,该视图上升,而我不是预期的(它不是self.view.frame.origin.y-= 100)。它不应该上升。
Error Image - 1 : Press PassTextField at first
Error Image - 2 : Press IDTextField after press PassTextField
Class LoginViewController:UIViewController,UITextFieldDelegate {
@IBOutlet weak var IDTextField: UITextField!
@IBOutlet weak var PassTextField: UITextField!
var ActivateTextfield : UITextField!
func textFieldDidBeginEditing(_ textField: UITextField) {
ActivateTextfield = textField
}
override func touchesBegan(_ touches: Set<UITouch>, with event: UIEvent?){
self.view.endEditing(true)
}
func textFieldShouldReturn(_ textField: UITextField) -> Bool {
ActivateTextfield.resignFirstResponder()
return true
}
override func viewDidLoad() {
super.viewDidLoad()
addKeyboardNotification()
IDTextField.delegate = self
PassTextField.delegate = self
}
}
扩展名LoginViewController {
func addKeyboardNotification() {
NotificationCenter.default.addObserver(self, selector: #selector(KeyBoardwillShow), name: UIResponder.keyboardWillShowNotification, object: nil)
NotificationCenter.default.addObserver(self, selector: #selector(KeyBoardwillHide), name: UIResponder.keyboardWillHideNotification, object: nil)
}
@objc func KeyBoardwillShow(_ noti : Notification ){
if let keyboardframe = noti.userInfo?[UIResponder.keyboardFrameEndUserInfoKey] as? NSValue {
let height = keyboardframe.cgRectValue.height
if self.view.frame.origin.y >= 0 {
self.view.frame.origin.y -= 100
}
}
}
@objc func KeyBoardwillHide(_ noti : Notification ){
self.view.frame.origin.y = 0
}
}
if self.view.frame.origin.y >= 0 {
let keyBoardHeight = (note.userInfo?[UIResponder.keyboardFrameBeginUserInfoKey] as? NSValue)?.cgRectValue.height
let keyboardDuration = (note.userInfo?[UIResponder.keyboardAnimationDurationUserInfoKey] as? NSNumber)?.doubleValue ?? 0
self.view.frame.origin.y = -(keyBoardHeight!+3)
UIView.animate(withDuration: keyboardDuration) {
self.view.layoutIfNeeded()
}
}