检查用户是否正在使用自定义键盘

时间:2019-01-10 16:01:55

标签: ios swift uikeyboard

是否可以检查用户当前是否正在使用自定义键盘?我知道如何检查所有键盘,但是我想知道所选择的确切键盘。

这是您如何检查可用的键盘,但是我如何知道用户当前使用的是哪个键盘?

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)
    }
}

在iPhone X上,打印输出为键盘高度为335.0 。如果您安装了Gboard并将其设置为默认键盘并运行该应用程序,则会得到打印输出 键盘高度为75.0 键盘高度为216.0 键盘高度为333.0 。我只是想知道期望这些垃圾值。

0 个答案:

没有答案