Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/swift/18.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ios 当键盘显示一个文本视图而不是另一个文本视图时,如何移动视图_Ios_Swift_Xcode_Uiview_Uitextview - Fatal编程技术网

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

Ios 当键盘显示一个文本视图而不是另一个文本视图时,如何移动视图,ios,swift,xcode,uiview,uitextview,Ios,Swift,Xcode,Uiview,Uitextview,我在顶部有一个UITextView,中间有一个UITextView,底部有一个UITextView。 如果使用底部UITextView或中间UITextView,我想在键盘显示时向上移动视图,但使用顶部UITextView时,视图不应移动 我该怎么做 func showLoginKeyBoard() { NotificationCenter.default.addObserver(self, selector: #selector(keyboardWillShow), name: UIR

我在顶部有一个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成为第一响应者时,视图会向上移动,这意味着在使用顶部UITextView时,视图不可见


如何确保顶部UITextView不会向上移动视图?

在回答您的问题之前, 根据你的代码,每次用户点击文本视图,你就可以添加观察者。不要这样做。在viewDidLoad()中添加观察者,不要忘记在ViewDidEnglishe()中删除观察者。否则会导致内存泄漏

现在,回答问题

定义fileprivate可选文本视图

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

我仍在尝试更改所有代码,以使其正常工作,因为我有showLoginKeyboard()和键盘将一起显示在UIViewController扩展中,因为此设置有3个控制器,顶部和底部控制器是自定义类。