У меня есть представление, которое содержит 4 текстовых поля и кнопку .. это представление не является основным видом ... проблема в том, что клавиатура закрывает текстовые поля вниз и кнопку!
я пробовал этот код, ноон не работает:
// Move the text field in a pretty animation!
func moveTextField(_ textField: UITextField, moveDistance: Int, up: Bool) {
let moveDuration = 0.3
let movement: CGFloat = CGFloat(up ? moveDistance : -moveDistance)
if textField.tag>=2{
UIView.beginAnimations("animateTextField", context: nil)
UIView.setAnimationBeginsFromCurrentState(true)
UIView.setAnimationDuration(moveDuration)
self.view.frame = self.view.frame.offsetBy(dx: 0, dy: movement)
UIView.commitAnimations()}
}
, и я установил для них номера тегов от 0 до 4 ...
, и я установил делегата в viewDidLoad:
fname.delegate=self
email.delegate=self
mobile1.delegate=self
mobile2.delegate=self
но это не сработало, клавиатура прикрывает текстовые поля вниз и кнопку!Зачем?и как ее решить?
ОБНОВЛЕНИЕ :
Мне кажется, я разобрался с проблемой ... Я попробовал это:
NotificationCenter.default.addObserver(self, selector: #selector(keyboardWillChange(notification:)), name: NSNotification.Name.UIKeyboardDidShow, object: nil)
NotificationCenter.default.addObserver(self, selector: #selector(keyboardWillChange(notification:)), name: NSNotification.Name.UIKeyboardDidHide, object: nil)
NotificationCenter.default.addObserver(self, selector: #selector(keyboardWillChange(notification:)), name: NSNotification.Name.UIKeyboardDidChangeFrame, object: nil)
}
deinit {
NotificationCenter.default.removeObserver(self, name: NSNotification.Name.UIKeyboardDidShow, object: nil)
NotificationCenter.default.removeObserver(self, name: NSNotification.Name.UIKeyboardDidHide, object: nil)
NotificationCenter.default.removeObserver(self, name: NSNotification.Name.UIKeyboardDidChangeFrame, object: nil)
}
@objc func keyboardWillChange(notification: Notification){
guard let keyboardRect = (notification.userInfo?[UIKeyboardFrameEndUserInfoKey] as? NSValue)?.cgRectValue else{
return
}
if activeTF.tag >= 2 {
if notification.name == Notification.Name.UIKeyboardDidShow || notification.name == Notification.Name.UIKeyboardDidChangeFrame {
view.frame.origin.y = -keyboardRect.height
}else{
view.frame.origin.y = 0
}
}
}
с:
func textFieldShouldReturn(_ textField: UITextField) -> Bool
{
textField.resignFirstResponder()
return true
}
оба функционируют отлично ... но когда я изменяю его на:
func textFieldShouldReturn(_ textField: UITextField) -> Bool
{
// Try to find next responder
if let nextField = textField.superview?.viewWithTag(textField.tag + 1) as? UITextField {
nextField.becomeFirstResponder()
} else {
// Not found, so remove keyboard.
textField.resignFirstResponder()
}
//do not add a line break
return false
}
, будет работать только maketextfieldreturn, а смена клавиатуры не будет работать!Почему?