Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/swift/19.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ios 将textField更改为textView时出现问题?_Ios_Swift_Keyboard_Textview_Textfield - Fatal编程技术网

Ios 将textField更改为textView时出现问题?

Ios 将textField更改为textView时出现问题?,ios,swift,keyboard,textview,textfield,Ios,Swift,Keyboard,Textview,Textfield,我有一个带有几个文本字段的viewController。过了一会儿,我发现真的没有办法将文本字段变成多行(如果你问我的话,那就太愚蠢了!) 所以我把所有的文本字段都改成了文本视图,这样用户就可以写几行了。现在,在我将大量代码组合到这些文本字段之前,因为让文本字段根据键盘大小上下移动的复杂性等等 更糟糕的是,我想我可以把所有的单词“textField”改成textView,然后键盘也会这样。我不能。以下是我的代码(更改为尝试适应新的文本视图,而不是旧的文本字段): 应用程序编译得很好,但当我按任意

我有一个带有几个文本字段的viewController。过了一会儿,我发现真的没有办法将文本字段变成多行(如果你问我的话,那就太愚蠢了!)

所以我把所有的文本字段都改成了文本视图,这样用户就可以写几行了。现在,在我将大量代码组合到这些文本字段之前,因为让文本字段根据键盘大小上下移动的复杂性等等

更糟糕的是,我想我可以把所有的单词“textField”改成textView,然后键盘也会这样。我不能。以下是我的代码(更改为尝试适应新的文本视图,而不是旧的文本字段):

应用程序编译得很好,但当我按任意textView输入输入时,键盘的istead弹出,应用程序崩溃,我得到:“线程1:致命错误:在解包可选值时意外发现零”

这显示在“let keyboardSize=…”行上

有人能看出我的错误吗?或者告诉我另一种根据键盘移动视图的方法-当使用文本视图而不是文本字段时

另一方面。。。谁能向我解释一下,为什么同时存在“文本字段”和“文本视图”??看在上帝的份上,苹果为什么不把这些东西放在一起呢

首先谢谢!:)

使用pod

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

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

要使用pod

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


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

我不知道为什么要更改
self.view
的框架
self.view
是视图控制器的内容视图。我不知道为什么要更改
self.view
的框架
self.view
是视图控制器的内容视图。
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)
}