Проблемы при изменении textField на textView? - PullRequest
0 голосов
/ 14 ноября 2018

У меня был viewController с несколькими текстовыми полями. Затем, через некоторое время, я обнаружил, что на самом деле нет способа превратить textFields в многострочные (чертовски глупо, если вы спросите меня!).

Итак, я изменил все textFields на textViews, чтобы у пользователя была возможность написать несколько строк. Теперь, до того, как у меня было много кода, объединенного с этими textFields, из-за сложности перемещения textField вверх и вниз в соответствии с keyboardSize и т. Д.

Странно то, что я подумал, что могу просто поменять все слова «textField» на textView - и тогда клавиатура будет вести себя так же. Я не могу Вот мой код (изменен, чтобы попытаться подогнать мои новые textViews вместо старых textFields):

override func viewDidLoad() {
    super.viewDidLoad()

let notificationCenter = NotificationCenter.default
    notificationCenter.addObserver(self, selector: #selector(keyboardDidShow), name: UIResponder.keyboardWillShowNotification, object: nil)
    notificationCenter.addObserver(self, selector: #selector(keyboardWillHide), name: UIResponder.keyboardWillHideNotification, object: nil)
}

@objc func keyboardDidShow(notification: NSNotification) {
    let info:NSDictionary = notification.userInfo! as NSDictionary
    let keyboardSize = (info[UIResponder.keyboardFrameBeginUserInfoKey] as! NSValue).cgRectValue
    let keyboardY = self.view.frame.height - keyboardSize.height
    let editingTextFieldY:CGFloat! = self.activeTextView.frame.origin.y

    if self.view.frame.origin.y >= 0 {
    // Checking if the textfield is really being hidden:
    if editingTextFieldY > keyboardY - 60 {
        UIView.animate(withDuration: 0.25, delay: 0.0, options: UIView.AnimationOptions.curveEaseIn, animations: {
            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)
        }, completion: nil)
} } }

@objc func keyboardWillHide(notification: NSNotification) {
    UIView.animate(withDuration: 0.25, delay: 0.0, options: UIView.AnimationOptions.curveEaseIn, animations: {
        self.view.frame = CGRect(x: 0, y: 0, width: self.view.bounds.width, height: self.view.bounds.height)
    }, completion: nil)
}

Приложение компилируется нормально, но когда я нажимаю любой textView для ввода ввода, вместо всплывающей клавиатуры, приложение вылетает, и я получаю: «Поток 1: Неустранимая ошибка: неожиданно обнаружен ноль при развертывании необязательного значения».

Это появляется в строке 'let keyboardSize = ...'

Кто-нибудь может увидеть мою ошибку? Или скажите мне другой способ перемещения представления в соответствии с клавиатурой - при работе с textViews, а не textFields?

И еще одно замечание ... Может кто-нибудь объяснить мне, почему существуют и textField, и textView? Почему, во имя Бога, яблоко не может просто соединить это воедино? ..

Спасибо заранее! :)

1 Ответ

0 голосов
/ 14 ноября 2018

Для использования pod IQKeyboardManager

При разработке приложений для iOS мы часто сталкиваемся с проблемами, когда клавиатура iPhone скользит вверх и закрывает UITextField / UITextView.

IQKeyboardManager позволяет предотвратить эту проблему с клавиатурой, скользящей вверх и покрывающей UITextField/UITextView, без необходимости написания какого-либо кода или каких-либо дополнительных настроек. Чтобы использовать IQKeyboardManager, вам просто нужно добавить исходные файлы в ваш проект.

...