Проверьте, использует ли пользователь пользовательскую клавиатуру - PullRequest
0 голосов
/ 10 января 2019

Есть ли способ проверить, использует ли пользователь в настоящее время пользовательскую клавиатуру? Я знаю, как проверить все клавиатуры, но я хочу знать, какая именно клавиатура выбрана.

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

class func isKeyboardExtensionEnabled() -> Bool {
    guard let keyboards = UserDefaults.standard.dictionaryRepresentation()["AppleKeyboards"] as? [String] else {
        return false
    }
    print("the keyboards are \(keyboards)")
    for keyboard in keyboards {
        if keyboard.contains("KeyboardExtension"){
            return true
        }
    }

    return false
}

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

let keyboardFrame: NSValue = notification.userInfo?[UIKeyboardFrameEndUserInfoKey] as? NSValue

Но для уведомления UIKeyboardWillShow высота неверна, в результате чего высота, необходимая для просмотра с фиксированной высотой, неверна. Это правильно после вызова 2 или 3, но для пользовательских клавиатур я хотел бы знать, чтобы ожидать ошибочных значений.

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

import UIKit
import Foundation
class ViewController: UIViewController {

    override func viewDidLoad() {
        super.viewDidLoad()
        NotificationCenter.default.addObserver(self, selector: #selector(keyboardWillAppear(notification:)), name:  UIWindow.keyboardWillShowNotification, object: nil)

        showKeyboard()

    }

    func showKeyboard(){
        let tf = UITextField(frame: .zero)
        self.view.addSubview(tf)
        tf.becomeFirstResponder()

    }

    //MARK: Keyboard
    @objc func keyboardWillAppear(notification: NSNotification){
        //find the extrasafe bottom
        if let userInfo = notification.userInfo as? [String: Any],
            let keyboardFrame: NSValue = userInfo[UIResponder.keyboardFrameEndUserInfoKey] as? NSValue{
            let keyboardRectangle = keyboardFrame.cgRectValue
            let keyboardHeight = keyboardRectangle.height
            print("keyboard height is \(keyboardHeight)")
        }
    }

    deinit {
        NotificationCenter.default.removeObserver(self, name: UIWindow.keyboardWillShowNotification, object: nil)
    }
}

Выходные данные для печати Высота клавиатуры составляет 335,0 на iPhone X. Если вы установите Gboard и сделаете его клавиатурой по умолчанию и запустите приложение, вы получите распечатку. высота клавиатуры составляет 75,0 высота клавиатуры 216,0 высота клавиатуры составляет 333,0 . Я просто хотел бы знать, чтобы ожидать эти ненужные ценности.

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