I have read this,但它只能在英语中使用,因为它只使用空格和NewlineCharacterSet之类的东西作为分隔符。
我想在附件输入视图中添加左箭头和右箭头,以便在UITextView
中按字词移动光标。
我想知道如何支持某些亚洲语言的功能,如中文
PS:我会添加一个例子,当有英文字符和中文字符时,CFStringTokenizer无法使用
test string:
Happy Christmas! Text view test 云存储容器测试开心 yeap
the expected boundaries:
Happy/ Christmas!/ Text/ view/ test/ 云/存储/容器/测试/开心/ yeap/
the boundaries show in reality:
Happy/ Christmas!/ Text/ view/ test/ 云存储容器测试开心/ yeap/
答案 0 :(得分:0)
我不会说中文,但根据文档,
CFStringTokenizer
能够找到多种语言的单词边界,
包括亚洲语言。
以下代码显示了如何从一个单词(第6位的“世界”)前进 到下一个字(位置13的“这个”):
// Test string.
NSString *string = @"Hello world. This is great.";
// Create tokenizer
CFStringTokenizerRef tokenizer = CFStringTokenizerCreate(NULL,
(__bridge CFStringRef)(string),
CFRangeMake(0, [string length]),
kCFStringTokenizerUnitWordBoundary,
CFLocaleCopyCurrent());
// Start with a position that is inside the word "world".
CFIndex position = 6;
// Goto current token ("world")
CFStringTokenizerTokenType tokenType;
tokenType = CFStringTokenizerGoToTokenAtIndex(tokenizer, position);
if (tokenType != kCFStringTokenizerTokenNone) {
// Advance to next "normal" token:
tokenType = CFStringTokenizerAdvanceToNextToken(tokenizer);
while (tokenType != kCFStringTokenizerTokenNone && tokenType != kCFStringTokenizerTokenNormal) {
tokenType = CFStringTokenizerAdvanceToNextToken(tokenizer);
}
if (tokenType != kCFStringTokenizerTokenNone) {
// Get the location of next token in the string:
CFRange range = CFStringTokenizerGetCurrentTokenRange(tokenizer);
position = range.location;
NSLog(@"%ld", position);
// Output: 13 = position of the word "This"
}
}
没有CFStringTokenizerAdvanceToPreviousToken()
功能,所以要移动到
您必须从字符串的开头开始并前进。
答案 1 :(得分:0)
最后,我使用UITextInputTokenizer
来实现功能