将textField更改为textView时遇到问题?

时间:2018-11-14 12:19:21

标签: ios swift keyboard textview textfield

我有一个带几个textFields的viewController。然后过了一会儿,我发现实际上没有办法将textFields变成多行(如果您问我,这真是太愚蠢了!)。

因此,我将所有textFields都更改为textViews,以便用户可以写几行。现在,在我将大量代码组合到这些textField之前,由于使textField根据keyboardSize上下移动的复杂性。

奇怪的是,我以为我可以将所有单词'textField'更改为textView-然后键盘的行为相同。我不能这是我的代码(更改为尝试适合我的新textViews而不是旧的textField):

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:致命错误:在展开一个可选值时意外发现nil。

它出现在“ let keyboardSize = ...”行上

谁能看到我的错误?还是告诉我另一种根据键盘移动视图的方法-使用textViews而不是textFields时?

还有另外一个提示...谁能向我解释,为什么同时存在'textField'和'textView'?为什么以上帝的名义,苹果不只是将这些东西放在一起吗? ..

非常感谢! :)

1 个答案:

答案 0 :(得分:2)

要使用pod IQKeyboardManager

在开发iOS应用程序时,我们经常遇到iPhone键盘向上滑动并覆盖UITextField / UITextView的问题。

IQKeyboardManager使您可以避免键盘向上滑动并覆盖UITextField/UITextView的问题,而无需编写任何代码或进行任何其他设置。要使用IQKeyboardManager,您只需要将源文件添加到您的项目中。