2015-08-28 25 views
0

我正在使用自定義搜索欄的iOS項目。即使我在搜索欄中輸入093003或093 003,我也會陷入某種程度,我希望能夠像093-003那樣搜索文本。使用自定義uisearchbar搜索字符串

這是我比較字符串的地方。

NSArray *tempAccountArray = _searchBarText.length > 0 ? 
[[WBCBusinessLogic sharedInstance].internalAccountsArray 
filteredArrayUsingPredicate:[NSPredicate predicateWithFormat:@"displayName CONTAINS[cd] %@ || displayNumber LIKE %@", _searchBarText, _searchBarText]]: 
[WBCBusinessLogic sharedInstance].internalAccountsArray; 
+0

請分享一些代碼 – alexandresaiz

+0

代碼全都散落的方法。即使我發佈,它也沒有意義,因爲它分佈在不同的課程之間。如果你知道如何去做,你能分享一下邏輯嗎? – Somya

+0

@Somya請勿在評論中發佈代碼。用相關的細節更新你的問題。 – rmaddy

回答

0

這是我用來比較strings-

-(BOOL)doStringsMatch:(NSString*)first second:(NSString*)second 
{ 
    first = [first stringByReplacingOccurrencesOfString:@"-" withString:@""]; 
    first = [first stringByReplacingOccurrencesOfString:@" " withString:@""]; 
    NSLog(@"First String: %@", first); 

    second = [second stringByReplacingOccurrencesOfString:@"-" withString:@""]; 
    second = [second stringByReplacingOccurrencesOfString:@" " withString:@""]; 
    NSLog(@"Second String: %@", second); 

    return ([first isEqual:second]); 
} 
+0

使用此替代http://stackoverflow.com/a/13177885/1616513 –

0

你所要求的是非常簡單的。您需要一個忽略空格和連字符的字符串比較函數。因此,我們做到以下幾點:

  • 第一條帶的空間兩個字符串和連字符
  • 比較,如果它們相等,並返回結果。

    -(BOOL)doStringsMatch:(NSString*)first second:(NSString*)second 
    { 
        NSCharacterSet *skip = [NSCharacterSet characterSetWithCharactersInString:@"- "]; 
    
        return ([[first stringByTrimmingCharactersInSet:skip] isEqual:[second stringByTrimmingCharactersInSet:skip]]); 
    
    } 
    

編輯: 這僅修剪從字符串的開頭或結尾的字符。對於使用正則表達式一個更清潔的解決方案: https://stackoverflow.com/a/13177885/1616513

+0

stringByTrimmingCharacterInSet只會修剪字符串的開頭或結尾的字符。最好使用stringByReplacingOccurencesOfString。感謝您的幫助:) – Somya

+0

你說得對。我很快就錯過了:D。但我建議你使用正則表達式。這是更清潔.http://stackoverflow.com/a/13177885/1616513 –

相關問題