如何检测用户何时更改键盘?

时间:2014-06-11 16:18:52

标签: ios cocoa-touch uikeyboard emoji

有没有办法检测用户何时更改键盘类型,特别是在这种情况下更改为表情符号键盘?

2 个答案:

答案 0 :(得分:19)

您可以使用UITextInputMode来检测currentInputMode的当前语言 - 表情符号被视为一种语言。来自docs

  

UITextInputMode类的实例代表当前   文字输入模式。您可以使用此对象来确定主要对象   目前用于文本输入的语言。

您可以像这样测试表情符号键盘:

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


}

答案 1 :(得分:0)

迅速4:

NotificationCenter.default.addObserver(self,
     selector: #selector(FirstViewController.changeInputMode(_:)),
     name: NSNotification.Name.UITextInputCurrentInputModeDidChange, object: nil)

func changeInputMode(_ notification: Notification) 
    {
        let inputMethod = UITextInputMode.activeInputModes.description
        print("keyboard changed to \(inputMethod.description)")
    }