Как выделить текст в телефоне

Как выделить текст в телефоне

Выход

изображение на выходе

Это регулярные выражения учебник имеет подробную информацию о том , как найти нужный текст , используя регулярное выражение UITextviewи как выделить его.

Эфирный код, который должен быть использован:

- (void)viewDidLoad {   [super viewDidLoad];   [self searchData]; } 

1) После кода поиска для требуемого рисунка из данных, т.е. 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   } 



Источник: askvoprosy.com


Добавить комментарий