Переместить подпредставление вверх, когда клавиатура отображается над текстовыми полями в подпредставлении

-2

У меня есть два текстовых поля внутри subview, и я пытаюсь переместить subview вверх, когда появляется любое текстовое поле, щелкнутое внутри subview и клавиатуры. Проблема заключается в том, что subview движется вниз, когда subview поднят, и я нажал на второе текстовое поле. Он должен скрываться, когда я касаюсь любого вида, кроме текстовых полей.

Определение моего двух текстовых полей и подсмотра;

@IBOutlet weak var emailTextField: UITextField!
@IBOutlet weak var passwordTextField: UITextField!
@IBOutlet weak var loginView: UIView!

Код в viewDidLoad

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

    NotificationCenter.default.addObserver(self, selector:#selector(keyboardWillHide), name: .UIKeyboardWillShow, object: nil)

И еще две функции, которые показывают и скрывают клавиатуру

func keyboardWillShow(notification: NSNotification) {

    if let keyboardSize = (notification.userInfo?[UIKeyboardFrameBeginUserInfoKey] as? NSValue)?.cgRectValue {
        if loginView.frame.origin.y == 0{
            let height = keyboardSize.height

            self.loginView.frame.origin.y += height
        }

    }

}

func keyboardWillHide(notification: NSNotification) {


    if let keyboardSize = (notification.userInfo?[UIKeyboardFrameBeginUserInfoKey] as? NSValue)?.cgRectValue {
        if loginView.frame.origin.y != 0 {
            let height = keyboardSize.height
            self.loginView.frame.origin.y -= height
        }

    }
}

Я хотел бы знать, как я могу избежать subview вниз, когда я нажимаю текстовое поле, когда подвью вверх.

Теги:
keyboard
uitextfield

1 ответ

0

Просто сделайте y-origin представления равным нулю, когда клавиатура опущена. Когда вы нажимаете другой текстовый экран, пока клавиатура открыта, это так. func keyboardWillHide (уведомление: NSNotification) {

func keyboardWillShow(notification: NSNotification) {

    if let keyboardSize = (notification.userInfo?[UIKeyboardFrameBeginUserInfoKey] as? NSValue)?.cgRectValue {
        if loginView.frame.origin.y == 0{
            let height = keyboardSize.height

            self.loginView.frame.origin.y = -height
        }

    }

}

    if let keyboardSize = (notification.userInfo?[UIKeyboardFrameBeginUserInfoKey] as? NSValue)?.cgRectValue {
        if loginView.frame.origin.y != 0 {
            let height = keyboardSize.height
            self.loginView.frame.origin.y = 0
        }

    }
}
  • 0
    Я не хочу перемещать подпредставление до вершины self.view, я просто хочу переместить подпредставление вверх на высоту клавиатуры. И спасибо, но ваше предложение не сработало, как я ожидал, то же самое с моим.
  • 0
    Мой код переместит вид вверх в соответствии с высотой клавиатуры. По умолчанию ваш y-источник клавиатуры будет 0, а когда клавиатура поднимется, предположим, что высота равна 100, поэтому ваш вид должен располагаться в -100 y-origin, как и мой код. Мой код переместит представление на 100 пунктов выше независимо от того, какой он был последним. Но вы двигались вверх, чтобы переместиться на 100 пунктов вверх от его предыдущей y позиции. Так что я просто удаляю + = с помощью (- height), он не будет вычитать y, он просто сведет на нет значение y.

Ещё вопросы

Сообщество Overcoder
Наверх
Меню