UItableView搜索韩文文本

时间:2012-12-17 09:18:03

标签: objective-c ios uitableview search

在我们的UItableView搜索中,我们使用以下代码搜索单元格内容中的键入文本

NSComparisonResult result = [eachCellContent compare:searchText options:NSDiacriticInsensitiveSearch|NSCaseInsensitiveSearch range:NSMakeRange(0, [searchText length])];

这很好用。但这不适用于韩国文本。

E.g: 假设其中一个单元格文本是“소”。我们通过输入这两个字母ㅅ和getting来获得这种组合 如果我们只键入ㅅ,我们的比较方法不起作用,因此不列出“소”。 (如果我们输入ㅅ和ㅗ都可以使用)

但上面的例子与AddressBook应用程序配合得很好。

还有其他比较方法来支持这个吗? (我们还需要这个NSDiacriticInsensitiveSearch | NSCaseInsensitiveSearch)

感谢阅读。

1 个答案:

答案 0 :(得分:2)

您可以尝试使用

规范化字符串
NSString *normalizedContent = [eachCellContent decomposedStringWithCanonicalMapping];
NSString *normalizedSearch = [searchText decomposedStringWithCanonicalMapping];

然后比较这些。


更新:以下算法适用于我的测试项目:

NSString *eachCellContent = @"소";
NSString *searchText = @"ㅅ";

NSString *normalizedContent = [eachCellContent decomposedStringWithCanonicalMapping];
NSString *normalizedSearch = [searchText decomposedStringWithCanonicalMapping];

NSComparisonResult result = [normalizedContent compare:normalizedSearch
                                               options:NSDiacriticInsensitiveSearch|NSCaseInsensitiveSearch
                                                 range:NSMakeRange(0, [normalizedSearch length])
                                                locale:[NSLocale currentLocale]];
if (result == NSOrderedSame) {
    NSLog(@"same");
}
// Output: same

除了分解Unicode字符外,“技巧”是使用本地化比较。