Ios 如何使搜索栏成为iPhone联系人应用程序或处理多个单词的搜索栏
我正在创建一个搜索栏,它的行为应该类似于iPhone联系人搜索栏。目前,它部分是这样做的。 这是我的密码Ios 如何使搜索栏成为iPhone联系人应用程序或处理多个单词的搜索栏,ios,objective-c,uisearchbar,predicate,Ios,Objective C,Uisearchbar,Predicate,我正在创建一个搜索栏,它的行为应该类似于iPhone联系人搜索栏。目前,它部分是这样做的。 这是我的密码 -(BOOL)searchDisplayController:(UISearchDisplayController *)controller shouldReloadTableForSearchString:(NSString *)searchString { NSRange whiteSpaceRange = [result rangeOfCharacterFromSet:[NS
-(BOOL)searchDisplayController:(UISearchDisplayController *)controller shouldReloadTableForSearchString:(NSString *)searchString
{
NSRange whiteSpaceRange = [result rangeOfCharacterFromSet:[NSCharacterSet whitespaceCharacterSet]];
if (whiteSpaceRange.location != NSNotFound)
{
NSString * stringAfterSpace = [result substringFromIndex:whiteSpaceRange.location];
NSString * stringBeforeSpace= [result substringToIndex:whiteSpaceRange.location];
NSPredicate *predicateForAfterSpace=[NSPredicate predicateWithFormat:@"catNm CONTAINS[cd] %@",stringAfterSpace];
NSPredicate *predicateForBegining = [NSPredicate predicateWithFormat:@"catNm BEGINSWITH[cd] %@", stringBeforeSpace];
NSPredicate *compoundPredicate = [NSCompoundPredicate andPredicateWithSubpredicates:@[predicateForBegining, predicateForAfterSpace]];
searchArray = [[dataArray filteredArrayUsingPredicate:compoundPredicate] mutableCopy];
}
else
{
NSPredicate *predicateForBegining = [NSPredicate predicateWithFormat:@"catNm BEGINSWITH[cd] %@", result];
NSString *stringAfterSpace=[NSString stringWithFormat:@" %@",result];
NSPredicate *predicateForAfterSpace=[NSPredicate predicateWithFormat:@"catNm CONTAINS[cd] %@",stringAfterSpace];
NSPredicate *compoundPredicate = [NSCompoundPredicate orPredicateWithSubpredicates:@[predicateForBegining,predicateForAfterSpace]];
searchArray = [[dataArray filteredArrayUsingPredicate:compoundPredicate] mutableCopy];
}
}
主要区别是我的搜索栏处理一个不完整的关键字,但不超过一个。假设array={{catNm=@“Asus Zenfone 3 Max”},{catNm=@“Asus Zenfone Go}}
如果搜索asu zen
或zen ma
则显示结果,但如果搜索asu zen max
则出错
我想知道的是如何在搜索栏中处理多个空格,这里有一些你可以使用的东西:正则表达式(Regex) 我对regex不是很有信心,但这应该可以做到。如果你想添加更复杂的东西,可以使用在线RegexTools 结果/样本测试:
$>SearchString: "asus zen max"
Filtered: (
"Asus Zenfone 3 Max"
)
$>SearchString: "zen ma"
Filtered: (
"Asus Zenfone 3 Max"
)
$>SearchString: "asu zen"
Filtered: (
"Asus Zenfone 3 Max",
"Asus Zenfone Go"
)
$>SearchString: "zen"
Filtered: (
"Asus Zenfone 3 Max",
"Asus Zenfone Go"
)
$>SearchString: "M"
Filtered: (
"Asus Zenfone 3 Max"
)
$>SearchString: "sams"
Filtered: NO RESULT
$>SearchString: "zen asu"
Filtered: NO RESULT
$>SearchString: "zen g"
Filtered: (
"Asus Zenfone Go"
)
$>SearchString: "a g"
Filtered: (
"Asus Zenfone Go"
)
$>SearchString: "asus zen max"
Filtered: (
"Asus Zenfone 3 Max"
)
$>SearchString: "zen ma"
Filtered: (
"Asus Zenfone 3 Max"
)
$>SearchString: "asu zen"
Filtered: (
"Asus Zenfone 3 Max",
"Asus Zenfone Go"
)
$>SearchString: "zen"
Filtered: (
"Asus Zenfone 3 Max",
"Asus Zenfone Go"
)
$>SearchString: "M"
Filtered: (
"Asus Zenfone 3 Max"
)
$>SearchString: "sams"
Filtered: NO RESULT
$>SearchString: "zen asu"
Filtered: NO RESULT
$>SearchString: "zen g"
Filtered: (
"Asus Zenfone Go"
)
$>SearchString: "a g"
Filtered: (
"Asus Zenfone Go"
)