Ios 使用Swift使用键盘向上移动文本视图
我是iOS开发新手。 我正在使用具有多个TextField和TextView的视图。我正在尝试向上移动视图,以避免键盘隐藏编辑TextField和TextView内容。以下代码适用于所有TextField,但在编辑TextView时不会向上移动视图。希望您理解我的问题。 提前谢谢Ios 使用Swift使用键盘向上移动文本视图,ios,swift,uiscrollview,keyboard,uikeyboard,Ios,Swift,Uiscrollview,Keyboard,Uikeyboard,我是iOS开发新手。 我正在使用具有多个TextField和TextView的视图。我正在尝试向上移动视图,以避免键盘隐藏编辑TextField和TextView内容。以下代码适用于所有TextField,但在编辑TextView时不会向上移动视图。希望您理解我的问题。 提前谢谢 override func viewDidLoad() { super.viewDidLoad() NotificationCenter.default.addObserver(self, select
override func viewDidLoad() {
super.viewDidLoad()
NotificationCenter.default.addObserver(self, selector: #selector(keyboardWillShow(notification:)), name: .UIKeyboardWillShow, object: nil)
NotificationCenter.default.addObserver(self, selector: #selector(keyboardWillHide(notification:)), name: .UIKeyboardWillHide, object: nil)
}
deinit {
NotificationCenter.default.removeObserver(self)
}
var keybordenabled = false
@objc func keyboardWillShow(notification: NSNotification) {
if(keybordenabled == false){
adjustInsetForKeyboardShow(show: true, notification: notification)
keybordenabled = true
}
}
@objc func keyboardWillHide(notification: NSNotification) {
keybordenabled = false
adjustInsetForKeyboardShow(show: false, notification: notification)
}
func adjustInsetForKeyboardShow(show: Bool, notification: NSNotification) {
let userInfo = notification.userInfo ?? [:]
let keyboardFrame = (userInfo[UIKeyboardFrameBeginUserInfoKey] as! NSValue).cgRectValue
let adjustment = (keyboardFrame.height * (show ? 1 : -1)) + 20
scrollView.contentInset.bottom += adjustment
scrollView.scrollIndicatorInsets.bottom += adjustment
self.view.layoutIfNeeded()
}
func textViewDidBeginEditing(_ textView: UITextView)
{
if (textView.text == "Enter comment here...")
{
textView.text = ""
textView.textColor = .black
}
textView.becomeFirstResponder()
}
func textViewDidEndEditing(_ textView: UITextView)
{
if (textView.text == "")
{
textView.text = "Enter comment here..."
textView.textColor = .lightGray
}
textView.resignFirstResponder()
}
@Jhon您可以使用IQKeyboard第三方库处理文本字段和文本视图滚动键盘外观。使用此IQKeyboardSDK将管理所有文本字段和文本视图的自动滚动,也将节省大量的工作和时间
请参阅此链接:使用IQKeyboard Library检查此UITextViewTextDidBeginEditingUITextViewTextDidEndEditing@ElTomato对不起,我没听清你说的话谢谢……我有一些复杂的视图(嵌入容器视图中的文本视图,…)..…IQKeyboard manager未按预期工作…您应该使用
UIKeyboardFrameEndUserInfoKey
而不是UIKeyboardFrameBeginUserInfoKey
。这个命名很好地解释了它本身,但是为了进一步的参考,您可以在这里检查它:在KeyboardWillEnglish中,您还可以设置self.view.frame.origin.y=0它也可以工作。
This is work Me!
override func viewWillAppear(_ animated: Bool) {
NotificationCenter.default.addObserver(self, selector: #selector(keyboardWillDisappear), name: Notification.Name.UIKeyboardWillHide, object: nil)
NotificationCenter.default.addObserver(self, selector: #selector(keyboardWillAppear), name: Notification.Name.UIKeyboardWillShow, object: nil)
}
override func viewWillDisappear(_ animated: Bool) {
NotificationCenter.default.removeObserver(self)
}
@objc func keyboardWillAppear(_ notification: NSNotification) {
if let keyboardSize = (notification.userInfo?[UIKeyboardFrameBeginUserInfoKey] as? NSValue)?.cgRectValue {
if self.view.frame.origin.y == 0{
self.view.frame.origin.y -= keyboardSize.height
}
}
}
@objc func keyboardWillDisappear(_ notification: NSNotification) {
if let keyboardSize = (notification.userInfo?[UIKeyboardFrameBeginUserInfoKey] as? NSValue)?.cgRectValue {
if self.view.frame.origin.y != 0{
self.view.frame.origin.y += keyboardSize.height
}
}
}