在我们的UItableView搜索中,我们使用以下代码搜索单元格内容中的键入文本
NSComparisonResult result = [eachCellContent compare:searchText options:NSDiacriticInsensitiveSearch|NSCaseInsensitiveSearch range:NSMakeRange(0, [searchText length])];
这很好用。但这不适用于韩国文本。
E.g: 假设其中一个单元格文本是“소”。我们通过输入这两个字母ㅅ和getting来获得这种组合 如果我们只键入ㅅ,我们的比较方法不起作用,因此不列出“소”。 (如果我们输入ㅅ和ㅗ都可以使用)
但上面的例子与AddressBook应用程序配合得很好。
还有其他比较方法来支持这个吗? (我们还需要这个NSDiacriticInsensitiveSearch | NSCaseInsensitiveSearch)
感谢阅读。
答案 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字符外,“技巧”是使用本地化比较。