Как показать и скрыть клавиатуру с подпредставлением - PullRequest
0 голосов
/ 01 марта 2019

У меня есть пользовательский UIView, который является подпредставлением для UIViewController.

Я добавил его в свою раскадровку и установил его в Скрытый.

Мое подпредставление также находится вдругой UIView, который я использую в качестве «размытия», который также изначально скрыт.

У меня есть функции, которые будут показывать и скрывать подпредставления.

Мое пользовательское подпредставление имеет UITextField.Я могу показать клавиатуру и переместить подпрограмму вверх без проблем.Когда я набираю клавиатуру или отклоняю ее, мое подпредставление перемещается вверх и влево.Когда я пытаюсь снова показать свое подпредставление, оно отображается неправильно (вверх и влево).

Настраиваемое подпредставление начинается в центре моего экрана.

Цель состоит в том, чтобы переместить его вверх, когдаклавиатура отображается так, что она не будет охватывать подпредставление или UITextField, позволять пользователю вводить UITextField, а затем отклонять клавиатуру и перемещать пользовательское подпредставление обратно в центр.

В моем UIViewController:

// Showing the custom sub view
func displayCustomSubView() {
    if let window = UIApplication.shared.keyWindow {
        self.blurView.isHidden = false
        self.customSubView.isHidden = false
        self.blurView.frame = window.frame
        self.customSubView.center = window.center
        window.addSubview(self.blurView)
        UIApplication.shared.keyWindow?.bringSubviewToFront(self.blurView)
    }
}


// Hiding the custom sub view
// the custom sub view has a button I tap to hide
@objc func dismissCustomSubView() {
    self.blurView.isHidden = true
    self.customSubView.isHidden = true
}

// Show Keyboard
// Since I am using the window to make sure my blur view expands to the full frame, I have tried just moving the window up
@objc func keyboardWillShow(sender: NSNotification) {
    if let window = UIApplication.shared.keyWindow {
        window.frame.origin.y = -75
    }
}

// Hide Keyboard
@objc func keyboardWillHide(sender: NSNotification) {
    if let window = UIApplication.shared.keyWindow {
        window.frame.origin.y = 0
    }
}


// Custom Subview Extension

extension CustomSubView: UITextFieldDelegate {
    func textFieldShouldReturn(_ textField: UITextField) -> Bool {
        textField.resignFirstResponder()
        return true
    }
}

Добавленное расширение собственного подпредставления выше.

1 Ответ

0 голосов
/ 01 марта 2019

Сначала добавьте это уведомление в ваш viewDidLoad ().И создайте глобальную переменную с именем var keyboardH: CGFloat = 0:

  NotificationCenter.default.addObserver(
    self,
    selector: #selector(keyboardWillShow),
    name: UIResponder.keyboardWillShowNotification,
    object: nil
)

И эта функция ниже:

@objc func keyboardWillShow(_ notification: Notification) {
if let keyboardFrame: NSValue = notification.userInfo?[UIResponder.keyboardFrameEndUserInfoKey] as? NSValue {
    let keyboardRectangle = keyboardFrame.cgRectValue
    let keyboardHeight = keyboardRectangle.height
    self.keyboardH = keyboardHeight
}

Эта функция вызывается каждый раз, когда клавиатура присутствует, и будет отображать высоту клавиатуры ипозже мы можем использовать эту переменную.

Так в вашем коде:

@objc func keyboardWillShow(sender: NSNotification) {
if let window = UIApplication.shared.keyWindow {
    let position = window.frame.origin.y - keyboardH
    window.frame.origin.y = position
     }
}
...