我有一个带几个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'?为什么以上帝的名义,苹果不只是将这些东西放在一起吗? ..
非常感谢! :)
答案 0 :(得分:2)
要使用pod IQKeyboardManager
在开发iOS应用程序时,我们经常遇到iPhone键盘向上滑动并覆盖UITextField / UITextView的问题。
IQKeyboardManager
使您可以避免键盘向上滑动并覆盖UITextField/UITextView
的问题,而无需编写任何代码或进行任何其他设置。要使用IQKeyboardManager
,您只需要将源文件添加到您的项目中。