当键盘显示一个文本视图而不是另一个文本视图时如何移动视图

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 库,它只用一行代码就可以处理所有键盘事件