Как переместить представление, когда клавиатура представляет один текстовый вид, но не другой - PullRequest
1 голос
/ 16 апреля 2020

У меня 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()
    }
}

В настоящее время, когда любой из UITextViews становитсяFirstResponder, представление перемещается вверх, что означает, что при использовании верхнего UITextView оно не отображается.

Как я могу убедиться, что верхний UITextView не перемещает представление вверх

Ответы [ 2 ]

1 голос
/ 16 апреля 2020

Прежде чем ответить на ваш вопрос, согласно вашему коду каждый раз, когда пользователь нажимает на textView, вы добавляете Observer. Не делайте этого. Добавьте наблюдателей в viewDidLoad () и не забудьте удалить наблюдателей в viewDidDisappear (). В противном случае это приведет к утечкам памяти.

Теперь, ответ на вопрос

определение fileprivate Необязательный textView

var currentTextView:UITextView?

Затем назначьте textField в textViewDidBeginEditing

func textViewDidBeginEditing(_ textView: UITextView){
   currentTextView = textView
}

теперь вы можете показать или нет в соответствии с currentTextView

@objc func keyboardWillShow(notification: NSNotification){
     if let txtView = currentTextView{
         txtView != topTextView {
         //move up the view
         }
     }
}
0 голосов
/ 16 апреля 2020

Я рекомендую использовать библиотеку IQKeyboardManager, которая обрабатывает все события клавиатуры только одной строкой кода

...