[設定]で有効になっているキーボードを特定する方法はありますか?
Sina Weiboとの共有は、中国語キーボードが有効になっている場合にのみ可能です。そのため、中国語キーボードが使用可能な場合にのみ、「SinaWeibo」アクションシートボタンを表示したいと思います。
[設定]で有効になっているキーボードを特定する方法はありますか?
Sina Weiboとの共有は、中国語キーボードが有効になっている場合にのみ可能です。そのため、中国語キーボードが使用可能な場合にのみ、「SinaWeibo」アクションシートボタンを表示したいと思います。
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
ます。この場合、ユーザーのロケールを確認することをお勧めします。ロケールが中国用である場合は、中国語キーボードを使用していると想定する必要があります。
このコードは、親アプリ自体のデバイス設定でキーボード拡張機能がアクティブ化されているかどうかを識別するのに非常に役立ちます。
//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!");
}
}