Swift Неожиданно обнаружил ноль при развертывании необязательного значения при попытке перемещения вверх по макету - PullRequest
0 голосов
/ 16 декабря 2018

Мне нужно переместить макет вверх, когда появляется клавиатура, и текстовое поле не отображается из-за размера клавиатуры.Поэтому я создал это:

    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

1 Ответ

0 голосов
/ 16 декабря 2018

Этот textFieldDidBeginEditing не вызывается.

Вам необходимо установить делегат исходного текстового поля в viewDidLoad

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