IOS, как извлечь все RangeOfString массива в цикле for? - PullRequest
2 голосов
/ 20 ноября 2011

Я хочу извлечь всю "дочь" из NSarray.

Например, nsarray сделан так:

hello
hi
hello daughter
my goodness
daughter (someone)
my daughter
how are you?
etc.

И я хочу извлечь все строки, которые содержат «дочь». Не могли бы вы указать мне правильное направление?

Мой текущий код:

for (NSString *mystring in self.array)
{
    if ([mystring rangeOfString:searchText].location!=NSNotFound)

{
   NSUInteger idx = [self.array indexOfObject:mystring];
   [self.filterarray addObject: mystring];
}
}

Ответы [ 2 ]

3 голосов
/ 20 ноября 2011
NSArray *lines = ...;
NSArray *filteredLines = [lines filteredArrayUsingPredicate:[NSPredicate predicateWithBlock:^BOOL(NSString *string, NSDictionary *bindings) {
    return ([string rangeOfString:searchText].location != NSNotFound);
}]];

(требуется iOS 4.0 или более поздняя версия)

Если вам нужна поддержка более ранних версий системы, используйте это:

NSArray *lines = ...;
NSArray *filteredLines = [lines filteredArrayUsingPredicate:[NSPredicate predicateWithFormat:@"(SELF contains[c] %@)", searchText]];

(требуется iOS 3.0 или более поздняя версия)

0 голосов
/ 15 апреля 2016
NSString *textViewText = @“hello hi hello daughter my goodness daughter (someone) my daughter how are you? etc.”;

NSMutableAttributedString *attributedString = [[NSMutableAttributedString alloc] initWithString:textViewText];


NSArray *highlightWords = @[@“daughter”,@”hello”];

for(NSString *word in highlightWords)
{
    NSRange range = NSMakeRange(0, textViewText.length);
    do{
        range = [textViewText rangeOfString:word options:NSCaseInsensitiveSearch range:range];
        [attributedString addAttribute:NSForegroundColorAttributeName value:[UIColor redColor] range:range];
        if (range.location != NSNotFound)
            range = NSMakeRange(range.location + 1, textViewText.length - (range.location + 1));
    }while(range.location != NSNotFound);

}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...