2013-03-14 8 views
4

Есть ли способ определить, какие клавиатуры включены в настройках?Включение ли клавиатуры в настройках?

Доступ к Sina Weibo возможен только в том случае, если китайская клавиатура включена, поэтому я бы хотел показать только кнопку «Сина Вебо», если доступна китайская клавиатура.

ответ

4

Благодаря комментарию Гая, есть лучший способ сделать это. Я обновил свой собственный код, чтобы использовать следующее:

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 См this answer обходные пути.)

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

Старый подход:

Я не знаю, если это разрешено или нет в приложении App Store, но вы можете сделать:

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

Вполне возможно, что если пользователь имеет только клавиатуры по умолчанию для их местности, не будет запись для ключа AppleKeyboards. В этом случае вы можете проверить локаль пользователя. Если локаль для Китая, то вы можете предположить, что у них есть китайская клавиатура.

+1

прекрасно работает, спасибо. Код для проверки текущего языка является ', если ([[[NSLocale preferredLanguages] objectAtIndex: 0] hasPrefix: @ "ж"]) {// текущий язык китайский }' – martinjbaker

+0

Это решение Hacky. Вы, ребята, должны проверить http://stackoverflow.com/questions/12816325/applekeyboards-in-ios6 –

+0

@GuyKogus Да, это может быть немного «взломанным», но это работает. Вопрос, на который вы ссылаетесь, не отвечает на этот вопрос. Ваша ссылка предназначена для определения текущей клавиатуры, а не для просмотра, доступна ли данная клавиатура. – rmaddy

-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!"); 
      } 
     }