0

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

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

这工作正常。但这不适用于韩文。

例如:假设其中一个单元格文本是“소”。//我们通过输入这两个字母 ㅅ 和 ㅗ 得到这个组合 如果我们只输入 ㅅ ,我们的比较方法不起作用,因此没有列出“소”。(如果我们同时输入ㅅ和ㅗ,它就可以工作)

但是上面的例子在 AddressBook 应用程序中运行良好。

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

感谢阅读。

4

1 回答 1

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 字符之外,“技巧”是使用本地化比较。

于 2012-12-17T10:52:30.443 回答