我在顶部有一个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不会将视图向上移动?
答案 0 :(得分:1)
在回答您的问题之前, 根据您的代码,每次用户单击textView时,您将添加Observer。请勿执行此操作。在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
}
}
}
答案 1 :(得分:0)
我建议使用IQKeyboardManager库,该库仅用一行代码即可处理所有键盘事件