Просмотр, возвращающийся к центру, когда следующее текстовое поле начинает редактировать - PullRequest
0 голосов
/ 21 сентября 2019

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

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

вот мой код: -

    class ActiveKeyboardView: UIView {

    var distanceBetweenViewAndKeyboard : CGFloat = 10

    private var viewOriginalYPoint : CGFloat = 0

    override init(frame: CGRect) {
        super.init(frame: frame)
        self.setUpKeyboardObserver()
    }

    required init?(coder aDecoder: NSCoder) {
        super.init(coder: aDecoder)
        self.setUpKeyboardObserver()
    }

    deinit {
        NotificationCenter.default.removeObserver(self)
    }

    private func setUpKeyboardObserver() {
        NotificationCenter.default.addObserver(self, selector: #selector(self.handleKeyboardWillShow(notification:)), name: UIResponder.keyboardWillShowNotification, object: nil)

        NotificationCenter.default.addObserver(self, selector: #selector(self.handleKeyboardWillHide(notification:)), name: UIResponder.keyboardWillHideNotification, object: nil)
    }

    @objc private func handleKeyboardWillShow(notification:NSNotification) {
        guard let keyboardFrame = notification.userInfo?[UIResponder.keyboardFrameEndUserInfoKey] as? CGRect else {return}

        viewOriginalYPoint = self.frame.origin.y
        let viewsBottomPoint = self.frame.origin.y + self.frame.height
        let keyboardTop = keyboardFrame.origin.y

        if keyboardTop < viewsBottomPoint {
            self.frame.origin.y -= (abs(viewsBottomPoint-keyboardTop) + distanceBetweenViewAndKeyboard)
        }
    }

    @objc private func handleKeyboardWillHide(notification:NSNotification) {
        guard let keyboardAnimationDuration = notification.userInfo?[UIResponder.keyboardAnimationDurationUserInfoKey] as? Double else {return}

        UIView.animate(withDuration: keyboardAnimationDuration) { [weak self] in
            self?.frame.origin.y = (self?.viewOriginalYPoint)!
        }
    }
}

вот github ссылка

1 Ответ

0 голосов
/ 24 сентября 2019

Вам нужно ActiveKeyboardView Вставить в Scroll View, чтобы его можно было автоматически прокручивать в ActiveKeyboardView Textfield начинает редактирование.

Если вы используете ActiveKeyboardView для создания расстояния KeyBoard с Textfield, выможете использовать CocoaPods в вашем проекте.

pod 'IQKeyboardManagerSwift'

, и вы можете добавить строку в AppDelegate.swift файле.

import IQKeyboardManagerSwift

func application(_ application: UIApplication, didFinishLaunchingWithOptions launchOptions: [UIApplication.LaunchOptionsKey: Any]?) -> Bool {

        IQKeyboardManager.shared.enable = true
        return true
}

, если вы хотите сделать определенное расстояние между клавиатурой и UITextfield, чемиспользуйте строку.

IQKeyboardManager.shared.keyboardDistanceFromTextField = 50
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...