4

[設定]で有効になっているキーボードを特定する方法はありますか?

Sina Weiboとの共有は、中国語キーボードが有効になっている場合にのみ可能です。そのため、中国語キーボードが使用可能な場合にのみ、「SinaWeibo」アクションシートボタンを表示したいと思います。

4

2 に答える 2

4

Guyのコメントのおかげで、これを行うためのより良い方法があります。以下を使用するように自分のコードを更新しました。

NSArray *keyboards = [UITextInputMode activeInputModes];
for (UITextInputMode *mode in keyboards) {
    NSString *name = mode.primaryLanguage;
    if ([name hasPrefix:@"zh-Han"]) {
        // One of the Chinese keyboards is installed
        break;
    }
}

Swift :(:iOS 9.xでは、の宣言が不適切なために壊れています。回避策については、この回答UITextInputMode activeInputModesを参照してください。)

let keyboards = UITextInputMode.activeInputModes()
for var mode in keyboards  {
    var primary = mode.primaryLanguage
    if let lang = primary {
        if lang.hasPrefix("zh") {
            // One of the Chinese keyboards is installed
            break
        }
    }
}

古いアプローチ:

これがAppStoreアプリで許可されているかどうかはわかりませんが、次のことができます。

NSArray *keyboards = [[NSUserDefaults standardUserDefaults] objectForKey:@"AppleKeyboards"];
for (NSString *keyboard in keyboards) {
    if ([keyboard hasPrefix:@"zh_Han"]) {
        // One of the Chinese keyboards is installed
    }
}

ユーザーが自分のロケールのデフォルトのキーボードしか持っていない場合、キーのエントリがない可能性がありAppleKeyboardsます。この場合、ユーザーのロケールを確認することをお勧めします。ロケールが中国用である場合は、中国語キーボードを使用していると想定する必要があります。

于 2013-03-15T01:04:27.983 に答える
-1

このコードは、親アプリ自体のデバイス設定でキーボード拡張機能がアクティブ化されているかどうかを識別するのに非常に役立ちます。

    //Put below function in app delegate...

    public func isKeyboardExtensionEnabled() -> Bool {
        guard let appBundleIdentifier = NSBundle.mainBundle().bundleIdentifier else {
            fatalError("isKeyboardExtensionEnabled(): Cannot retrieve bundle identifier.")
        }

        guard let keyboards = NSUserDefaults.standardUserDefaults().dictionaryRepresentation()["AppleKeyboards"] as? [String] else {
            // There is no key `AppleKeyboards` in NSUserDefaults. That happens sometimes.
            return false
        }

        let keyboardExtensionBundleIdentifierPrefix = appBundleIdentifier + "."
        for keyboard in keyboards {
            if keyboard.hasPrefix(keyboardExtensionBundleIdentifierPrefix) {
                return true
            }
        }

        return false
    }


    // Call it from below delegate method to identify...

    func applicationWillEnterForeground(_ application: UIApplication) {

            if(isKeyboardExtensionEnabled()){            
                showAlert(message: "Hurrey! My-Keyboard is activated");
            }
            else{
                showAlert(message: "Please activate My-Keyboard!");
            }

        }

    func applicationDidBecomeActive(_ application: UIApplication) {

            if(isKeyboardExtensionEnabled()){            
                showAlert(message: "Hurrey! My-Keyboard is activated");
            }
            else{
                showAlert(message: "Please activate My-Keyboard!");
            }
        }
于 2016-12-14T13:04:36.813 に答える