клавиатура, покрывающая текстовые поля в подпредставлении - PullRequest
0 голосов
/ 25 апреля 2018

У меня есть представление, которое содержит 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, а смена клавиатуры не будет работать!Почему?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...