Как выделить текст "сотовый телефон" на изображении?
Обновление
Я хочу искать текст на странице, и если он найден, текст должен быть выделен так, как я показал в прикрепленном изображении.
Как выделить текст "сотовый телефон" на изображении?
Обновление
Я хочу искать текст на странице, и если он найден, текст должен быть выделен так, как я показал в прикрепленном изображении.
Выход
Этот учебник по регулярным выражениям содержит подробную информацию о том, как искать нужный текст с использованием регулярного выражения на UITextview
и как его выделить.
Необходимый код, который должен использоваться:
- (void)viewDidLoad
{
[super viewDidLoad];
[self searchData];
}
1) После кода выполняется поиск требуемого шаблона из данных i.e TextView:
- (void) searchData
{
NSError *error = NULL;
NSString *pattern = @"Hello"; // pattern to search thee data either regular expression or word.
NSString *string = self.textView.text;
NSRange range = NSMakeRange(0, string.length);
NSRegularExpression *regex = [NSRegularExpression regularExpressionWithPattern:pattern options:NSRegularExpressionCaseInsensitive error:&error];
NSArray *matches = [regex matchesInString:string options:NSMatchingProgress ran ge:range];
[self highlightMatches:matches];
}
2) Здесь мы выделяем совпадения, полученные из результата согласования регулярных выражений, используя CALayer и метку:
- (void)highlightMatches:(NSArray *)matches
{
__block NSMutableAttributedString *mutableAttributedString = self.textView.attributedText.mutableCopy;
[matches enumerateObjectsUsingBlock:^(id obj, NSUInteger idx, BOOL *stop)
{
if ([obj isKindOfClass:[NSTextCheckingResult class]])
{
NSTextCheckingResult *match = (NSTextCheckingResult *)obj;
CGRect rect = [self frameOfTextRange:match.range inTextView:self.textView];
/** Shadow */
CALayer *shadowLayer = [CALayer new];
shadowLayer.frame = CGRectMake(rect.origin.x, rect.origin.y-4, rect.size.width, rect.size.height);
shadowLayer.cornerRadius = 5;
shadowLayer.backgroundColor = [UIColor yellowColor].CGColor;
shadowLayer.shadowColor = [UIColor blackColor].CGColor;
shadowLayer.shadowOpacity = 0.6;
shadowLayer.shadowOffset = CGSizeMake(1,1);
shadowLayer.shadowRadius = 3;
/** Label */
UILabel *lbl = [[UILabel alloc] initWithFrame:CGRectMake(rect.origin.x, rect.origin.y-4, rect.size.width, rect.size.height)];
lbl.font = [UIFont fontWithName:@"Helvetica" size:12];
lbl.textColor = [UIColor blackColor];
[lbl setText:[[mutableAttributedString attributedSubstringFromRange:match.range] string]];
lbl.backgroundColor = [UIColor clearColor];
lbl.textAlignment = NSTextAlignmentCenter;
lbl.layer.cornerRadius = 10;
/** Add Label and layer*/
[self.view.layer addSublayer:shadowLayer];
[self.view addSubview:lbl];
}
}];
}
Функция, используемая для получения кадра совпадающего текста в textView:
- (CGRect)frameOfTextRange:(NSRange)range inTextView:(UITextView *)textView
{
UITextPosition *beginning = textView.beginningOfDocument; //Error=: request for member 'beginningOfDocument' in something not a structure or union
UITextPosition *start = [textView positionFromPosition:beginning offset:range.location];
UITextPosition *end = [textView positionFromPosition:start offset:range.length];
UITextRange *textRange = [textView textRangeFromPosition:start toPosition:end];
CGRect rect = [textView firstRectForRange:textRange]; //Error: Invalid Intializer
return [textView convertRect:rect fromView:textView.textInputView]; // Error: request for member 'textInputView' in something not a structure or union
}
Используйте NSMutableAttributedString
, это может сработать для вас.
NSString *myString = @"Hello";
NSMutableAttributedString *aString = [[NSMutableAttributedString alloc] initWithString:myString];
NSRange theRange = NSMakeRange(0,[aString length]);
//Здесь мы устанавливаем цвет переднего плана и фона для текста для выделяя его.
[aString addAttribute:NSFontAttributeName value:[UIFont fontWithName:@"MyriadPro-Bold" size:17.5f] range:theRange];
[aString addAttribute:NSForegroundColorAttributeName value:[UIColor purpleColor] range:theRange];
[aString addAttribute:NSBackgroundColorAttributeName value:[UIColor yellowColor] range:theRange];
//Вы можете изменить диапазон в зависимости от того, какую часть текста вы хотите выделить.
для этого вам нужно использовать core Text
, и для выделения вам нужно нарисовать текст в методе drawRect
, т.е. изменить цвет фона на желтый и увеличить размер шрифта текста
Существует репозиторий gifub "HighlightedWebView" , который обеспечивает практически тот же эффект, что и вы.
Подкаст Drop-in WebView, который добавляет подсветку результатов поиска в стиле Safari.
Я нашел ссылку для вас, я думаю, что это помогает. Ссылка здесь
он указывает
Вам нужно будет написать собственный собственный текстовый синтаксический анализатор PDF, если вы хотите выделить текст (или заплатить лицензию на решение промежуточного программного обеспечения). Формат в формате PDF является старым и имеет слой за слоем, добавленный к нему Adobe, некоторые из них который теперь является избыточным. Документация в формате PDF составляет более 700 страниц и не написана особенно четко, особенно когда вы впервые начинаете ее использовать. Кроме того, существует много разных писателей PDF, и каждый из них имеет собственную интерпретацию формата и позиционирует текст, используя разные команды и комбинации команд.
Чтобы выделить слова, вам нужно проанализировать каждую страницу (используя вызовы CGPDF) и извлечь текст и позиционные данные. Затем используйте наложение для выделения выделенных блоков поверх отображаемой страницы PDF.
Я думаю, что это помогает.