所以我写了这段代码,它只是把搜索到的短语放到上下文中,如果它接近段落的末尾(数组索引内的段落),那么它会显示为“很少”单词
在tableview单元格中,如果不在末尾,则显示“很少”单词
.
-(void)searchBar:(UISearchBar *)searchBar textDidChange:(NSString *)enteredSearchText{
if ([enteredSearchText length] == 0) {
[wholeTextOfDoaasLive removeAllObjects];
}
else{
[wholeTextOfDoaasLive removeAllObjects];
for (NSString * string in AllWholeText) { //create string that holds the value in that index
NSRange r = [string rangeOfString:enteredSearchText options:NSCaseInsensitiveSearch];
NSUInteger indexOfFoundString = r.location;
NSUInteger numberOfAvailableCharactersAfterPhrase = string.length - (indexOfFoundString + 1 );
NSUInteger takeCharacters = 50; //number of characters that will show in tableview cell
foundStringIsAtTheEnd =NO;
/// START: eliminate the "out of bounds" error ///
// if the searched phrase is at the end of the text and you ask for 50 characters after it, the app to crash. So here we check if the searched phrase is the near the end or if it's far away from the end. A) if it's close to the end then show words before it. B) if it's far from the end then show words after it.
if (numberOfAvailableCharactersAfterPhrase < 50) {
takeCharacters = 40;
if (numberOfAvailableCharactersAfterPhrase < 40) {
takeCharacters = 30;
if (numberOfAvailableCharactersAfterPhrase < 30) {
takeCharacters = 20;
if (numberOfAvailableCharactersAfterPhrase < 20) { //there is less than 20 characters after the searched phrase
takeCharacters = numberOfAvailableCharactersAfterPhrase+30;
foundStringIsAtTheEnd =YES;
}
}
}
}
/// END: eliminate the "out of bounds" error ///
if (indexOfFoundString != NSNotFound){
NSString *tableViewString;
if (foundStringIsAtTheEnd == YES) {
indexOfFoundString -= 30; //to show few words before the searched phrase
tableViewString = [string substringWithRange:NSMakeRange(indexOfFoundString, takeCharacters)];
/// START: remove cropped words, we want only full words ///
NSArray *arrayStoredText = [tableViewString componentsSeparatedByString:@" "];
NSMutableArray *myMutable = [[NSMutableArray alloc]initWithArray:arrayStoredText];
[myMutable removeObjectAtIndex:0]; //cuz maybe it's a cropped word
tableViewString = @"";
tableViewString = [myMutable componentsJoinedByString:@" "];
/// END: remove cropped words, we want only full words ///
}
else{ //if searched phrase is far from the end
tableViewString = [string substringWithRange:NSMakeRange(indexOfFoundString, takeCharacters)];
NSArray *arrayStoredText = [tableViewString componentsSeparatedByString:@" "];
NSMutableArray *myMutable = [[NSMutableArray alloc]initWithArray:arrayStoredText];
[myMutable removeLastObject]; //cuz maybe it's a cropped word
tableViewString = @"";
tableViewString = [myMutable componentsJoinedByString:@" "];
}
[wholeTextOfDoaasLiveArray addObject:tableViewString];
}
}
}
[_searchResultsTable reloadData];
}