Подтвердить что ты не робот

Как выделить текст, как на картинке?

Как выделить текст "сотовый телефон" на изображении?

enter image description here

Обновление

Я хочу искать текст на странице, и если он найден, текст должен быть выделен так, как я показал в прикрепленном изображении.

4b9b3361

Ответ 1

Выход

OutPut Image

Этот учебник по регулярным выражениям содержит подробную информацию о том, как искать нужный текст с использованием регулярного выражения на 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

 }

Ответ 2

Используйте 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];

//Вы можете изменить диапазон в зависимости от того, какую часть текста вы хотите выделить.

Ответ 3

для этого вам нужно использовать core Text, и для выделения вам нужно нарисовать текст в методе drawRect, т.е. изменить цвет фона на желтый и увеличить размер шрифта текста

учебник по coreText

Ответ 5

Я нашел ссылку для вас, я думаю, что это помогает. Ссылка здесь

он указывает

Вам нужно будет написать собственный собственный текстовый синтаксический анализатор PDF, если вы хотите выделить текст (или заплатить лицензию на решение промежуточного программного обеспечения). Формат в формате PDF является старым и имеет слой за слоем, добавленный к нему Adobe, некоторые из них который теперь является избыточным. Документация в формате PDF составляет более 700 страниц и не написана особенно четко, особенно когда вы впервые начинаете ее использовать. Кроме того, существует много разных писателей PDF, и каждый из них имеет собственную интерпретацию формата и позиционирует текст, используя разные команды и комбинации команд.

Чтобы выделить слова, вам нужно проанализировать каждую страницу (используя вызовы CGPDF) и извлечь текст и позиционные данные. Затем используйте наложение для выделения выделенных блоков поверх отображаемой страницы PDF.

Я думаю, что это помогает.