当键盘显示一个文本视图而不是另一个文本视图时如何移动视图
How to move the view when the keyboard presents with one textview but not another one
我在顶部有一个 UITextView,在中间有一个 UITextView,在底部有一个 UITextView。
如果使用底部 UITextView 或中心 UITextView,我想在出现键盘时向上移动视图,但是当使用顶部 UITextView 时,视图不应移动。
我该如何进行这项工作?
func showLoginKeyBoard()
{
NotificationCenter.default.addObserver(self, selector: #selector(keyboardWillShow), name: UIResponder.keyboardWillShowNotification, object: nil)
}
@objc func keyboardWillShow(notification: NSNotification)
{
if let keyboardSize = (notification.userInfo?[UIResponder.keyboardFrameBeginUserInfoKey] as? NSValue)?.cgRectValue
{
if self.view.frame.origin.y == 0
{
self.view.frame.origin.y -= keyboardSize.height
}
}
}
func textViewDidBeginEditing(_ textView: UITextView)
{
if textView == centreTextView
{
showLoginKeyBoard()
}
if textView == bottomTextView
{
showLoginKeyBoard()
}
}
目前,当任何 UITextView 成为 FirstResponder 时,视图会向上移动,这意味着当使用顶部 UITextView 时,它是不可见的。
如何确保顶部的 UITextView 不会向上移动视图?
在回答你的问题之前,
根据您的代码,每次用户单击您添加的 textView 时,Observer.Don 不会这样做。在 viewDidLoad() 中添加观察者并且不要忘记在 viewDidDisappear() 中移除观察者。否则会造成内存泄漏。
现在,回答问题
定义 fileprivate 可选 textView
var currentTextView:UITextView?
然后在textViewDidBeginEditing
中分配textField
func textViewDidBeginEditing(_ textView: UITextView){
currentTextView = textView
}
现在可以根据currentTextView显示或不显示了
@objc func keyboardWillShow(notification: NSNotification){
if let txtView = currentTextView{
txtView != topTextView {
//move up the view
}
}
}
我推荐使用 IQKeyboardManager 库,它只用一行代码就可以处理所有键盘事件
我在顶部有一个 UITextView,在中间有一个 UITextView,在底部有一个 UITextView。 如果使用底部 UITextView 或中心 UITextView,我想在出现键盘时向上移动视图,但是当使用顶部 UITextView 时,视图不应移动。
我该如何进行这项工作?
func showLoginKeyBoard()
{
NotificationCenter.default.addObserver(self, selector: #selector(keyboardWillShow), name: UIResponder.keyboardWillShowNotification, object: nil)
}
@objc func keyboardWillShow(notification: NSNotification)
{
if let keyboardSize = (notification.userInfo?[UIResponder.keyboardFrameBeginUserInfoKey] as? NSValue)?.cgRectValue
{
if self.view.frame.origin.y == 0
{
self.view.frame.origin.y -= keyboardSize.height
}
}
}
func textViewDidBeginEditing(_ textView: UITextView)
{
if textView == centreTextView
{
showLoginKeyBoard()
}
if textView == bottomTextView
{
showLoginKeyBoard()
}
}
目前,当任何 UITextView 成为 FirstResponder 时,视图会向上移动,这意味着当使用顶部 UITextView 时,它是不可见的。
如何确保顶部的 UITextView 不会向上移动视图?
在回答你的问题之前, 根据您的代码,每次用户单击您添加的 textView 时,Observer.Don 不会这样做。在 viewDidLoad() 中添加观察者并且不要忘记在 viewDidDisappear() 中移除观察者。否则会造成内存泄漏。
现在,回答问题
定义 fileprivate 可选 textView
var currentTextView:UITextView?
然后在textViewDidBeginEditing
中分配textFieldfunc textViewDidBeginEditing(_ textView: UITextView){
currentTextView = textView
}
现在可以根据currentTextView显示或不显示了
@objc func keyboardWillShow(notification: NSNotification){
if let txtView = currentTextView{
txtView != topTextView {
//move up the view
}
}
}
我推荐使用 IQKeyboardManager 库,它只用一行代码就可以处理所有键盘事件