Как определить, когда пользователь меняет клавиатуру?

Есть ли способ обнаружить, когда пользователь изменяет типы клавиатуры, в частности, на клавиатуру Emoji в этом случае?

Ответ 1

Вы можете использовать UITextInputMode для определения текущего языка currentInputMode - emoji считается языком. Из docs:

Экземпляр класса UITextInputMode представляет текущий режим ввода текста. Вы можете использовать этот объект для определения основного язык, используемый в настоящее время для ввода текста.

Вы можете проверить клавиатуру emoji следующим образом:

NSString *language = [[UITextInputMode currentInputMode] primaryLanguage];
BOOL isEmoji = [language isEqualToString:@"emoji"];
if (isEmoji)
{
   // do something
}

Вы можете получать уведомления об изменении режима ввода с помощью UITextInputCurrentInputModeDidChangeNotification. Это будет отображаться при изменении текущего режима ввода.

Здесь простое приложение, которое печатает NSLog при каждом изменении режима:

- (void)viewDidLoad
{
    [super viewDidLoad];
    [[NSNotificationCenter defaultCenter] addObserver:self
         selector:@selector(changeInputMode:) 
             name:UITextInputCurrentInputModeDidChangeNotification object:nil];}
}

-(void)changeInputMode:(NSNotification *)notification
{
    NSString *inputMethod = [[UITextInputMode currentInputMode] primaryLanguage];
    NSLog(@"inputMethod=%@",inputMethod);
}  

Или, если вы предпочитаете Swift:

import UIKit

class ViewController: UIViewController 
{

    override func viewDidLoad() {
        super.viewDidLoad()

        NSNotificationCenter.defaultCenter().addObserver(self, 
       selector: "changeInputMode:", 
           name: UITextInputCurrentInputModeDidChangeNotification, object: nil)
    }

    func changeInputMode(notification : NSNotification)
    {
        let inputMethod = UITextInputMode.currentInputMode().primaryLanguage
        println("inputMethod: \(inputMethod)")
    }


}