textInputMode 是 UIResponder 在 iOS 7 時(shí)增加的屬性,作用是控制 UIResponder 的鍵盤類型。
官方文檔:
The text input mode identifies the language and keyboard displayed when this responder is active.
關(guān)于 UITextInputMode
UIKit 會(huì)根據(jù) UITextInputMode 的 activeInputModes 來決定鍵盤會(huì)有多少種類型,這個(gè)屬性取自用戶在 iOS 系統(tǒng)設(shè)置中的配置愈捅。
在應(yīng)用中 UIKit 維護(hù)一個(gè)公共的鍵盤次序,以決定調(diào)起鍵盤時(shí)顯示哪一個(gè)鍵盤。用戶在調(diào)起鍵盤時(shí)切換鍵盤也會(huì)被記錄導(dǎo)這個(gè)次序中窃肠,默認(rèn)情況下所有的 textField,textView 調(diào)起鍵盤都使用這個(gè)次序刷允。
UIResponder 的 textInputMode 屬性
textInputMode 屬性能發(fā)揮的作用是指定 UIResponder 調(diào)起鍵盤的時(shí)候顯示的鍵盤類型冤留。忽略公共的鍵盤次序。
具體的做法是在子類中覆蓋 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 屬性
這個(gè)屬性的作用是建立一個(gè)追蹤標(biāo)識(shí)纤怒,UIKit 會(huì)為每個(gè)追蹤標(biāo)識(shí)維護(hù)獨(dú)立的鍵盤次序。
具體的用法也是在子類中覆蓋天通。代碼如下:
- (NSString *)textInputContextIdentifier
{
return @"emojiIdentifier";
}
總結(jié)
- 鍵盤次序可以看做一個(gè)隊(duì)列泊窘,UIKit 有公共的鍵盤次序
- 覆蓋 textInputContextIdentifier 后 UIKit 會(huì)維護(hù)新的鍵盤次序隊(duì)列
- textInputMode 的作用優(yōu)先于鍵盤次序,覆蓋后以此屬性為準(zhǔn)