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

时间:2020-04-16 03:34:19

标签: ios swift xcode uiview uitextview

我在顶部有一个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不会将视图向上移动?

2 个答案:

答案 0 :(得分:1)

在回答您的问题之前, 根据您的代码,每次用户单击textView时,您将添加Observer。请勿执行此操作。在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
         }
     }
}

答案 1 :(得分:0)

我建议使用IQKeyboardManager库,该库仅用一行代码即可处理所有键盘事件

相关问题