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 的作用优先于键盘次序,覆盖后以此属性为准