textInputMode

textInputMode 是 UIResponder 在 iOS 7 时增加的属性,作用是控制 UIResponder 的键盘类型。

官方文档:
The text input mode identifies the language and keyboard displayed when this responder is active.

关于 UITextInputMode

UIKit 会根据 UITextInputMode 的 activeInputModes 来决定键盘会有多少种类型,这个属性取自用户在 iOS 系统设置中的配置。

在应用中 UIKit 维护一个公共的键盘次序,以决定调起键盘时显示哪一个键盘。用户在调起键盘时切换键盘也会被记录导这个次序中,默认情况下所有的 textField,textView 调起键盘都使用这个次序。

UIResponder 的 textInputMode 属性

textInputMode 属性能发挥的作用是指定 UIResponder 调起键盘的时候显示的键盘类型。忽略公共的键盘次序。

具体的做法是在子类中覆盖 textInputMode 属性。代码如下:

- (UITextInputMode *)textInputMode
{
    static UITextInputMode *emojiMode = nil;
    if (emojiMode == nil) {
        for (UITextInputMode *mode in [UITextInputMode activeInputModes]) {
            if ([mode.primaryLanguage isEqualToString:@"emoji"]) {
                emojiMode = mode;
                break;
            }
        }
    }
    return emojiMode;
}

textInputContextIdentifier 属性

这个属性的作用是建立一个追踪标识,UIKit 会为每个追踪标识维护独立的键盘次序。

具体的用法也是在子类中覆盖。代码如下:

- (NSString *)textInputContextIdentifier
{
    return @"emojiIdentifier";
}

总结

  • 键盘次序可以看做一个队列,UIKit 有公共的键盘次序
  • 覆盖 textInputContextIdentifier 后 UIKit 会维护新的键盘次序队列
  • textInputMode 的作用优先于键盘次序,覆盖后以此属性为准

你可能感兴趣的:(textInputMode)