10

У меня есть UITextView, и есть определенные слова, которые я использую с помощью NSString stringWithFormat, что я хотел бы выделить полужирным шрифтом.Как выделить некоторые слова в моем UITextView с помощью NSMutableAttributedString?

Я осмотрел Stack Overflow и попытался следить за публикациями, но, я думаю, я не понимаю.

Вот что я играл с:

NSRange boldedRange = NSMakeRange(0, 4); 
    NSString *boldFontName = [[UIFont fontWithName:@"Helvetica-Bold" size:100]fontName]; 


    NSMutableAttributedString *attrString = [[NSMutableAttributedString alloc] initWithString:self.name]; 

    [attrString beginEditing]; 
    [attrString addAttribute:NSFontAttributeName 
         value:boldFontName 
         range:boldedRange]; 
    [attrString endEditing]; 

    self.resultsTextView.attributedText = attrString; 


    self.resultsTextView.text = [NSString stringWithFormat:@"One day, %@ was taking a walk and saw a %@ boy. He was %@ a %@.", attrString, self.adjective, self.adverb, self.noun]; 
+1

был некоторое время, так как я работал с приписываемыми строками, но мне кажется, что ваша проблема в том, что вы устанавливаете 'resultsTextView' для атрибута string, но следующая строка, которую вы устанавливаете, не относится к атрибуту' NSString'. 'NSString' не имеет атрибутов, поэтому вы в основном« отменяете »любые атрибуты, которые вы« сделали ». Если я правильно помню, у вас не могут быть оба атрибута 'attributedText' и' text', это либо один. – AMI289

+0

См. Ответ Вы можете выделить полужирный текст в текстовом виде. –

+0

@KiritModi Я знаю, что ты можешь спариваться. Но см. Вопрос, точнее последнюю строку кода. он в конечном итоге использует 'NSString' для своего' UITextView', а не 'NSAttributedString'. Вы не можете выделять текст в стандартном 'NSString'. – AMI289

ответ

19

Вы также можете установить его следующим образом, если вы хотите, установив словарь в целом, как атрибут

NSString *strTextView = @"This is some demo Text to set BOLD"; 

NSRange rangeBold = [strTextView rangeOfString:@"BOLD"]; 

UIFont *fontText = [UIFont boldSystemFontOfSize:10]; 
NSDictionary *dictBoldText = [NSDictionary dictionaryWithObjectsAndKeys:fontText, NSFontAttributeName, nil]; 

NSMutableAttributedString *mutAttrTextViewString = [[NSMutableAttributedString alloc] initWithString:strTextView]; 
[mutAttrTextViewString setAttributes:dictBoldText range:rangeBold]; 

[textViewTermsPolicy setAttributedText:mutAttrTextViewString]; 
+0

Что делать, если я хотел бы выделить другое слово, кроме BOLD? Например, это некоторые ** демотекст ** для установки ** BOLD **? –

+0

Надеюсь, вы, возможно, решили проблему, с которой вы столкнулись, но все же, если вы не просто замените «BOLD» на «demo Text» – channi

6

использования приведенный ниже код для установки строки атрибута в TextView.

NSString *infoString [email protected]"I am Kirit Modi from Deesa."; 

    NSMutableAttributedString *attString=[[NSMutableAttributedString alloc] initWithString:infoString]; 

    UIFont *font_regular=[UIFont fontWithName:@"Helvetica" size:20.0f]; 
    UIFont *font_bold=[UIFont fontWithName:@"Helvetica-Bold" size:20.0f]; 

    [attString addAttribute:NSFontAttributeName value:font_regular range:NSMakeRange(0, 4)]; 

    [attString addAttribute:NSFontAttributeName value:font_bold range:NSMakeRange(5, 15)]; 

    [attString addAttribute:NSFontAttributeName value:font_regular range:NSMakeRange(16, infoString.length - 15 - 1)]; 

    [self.txtView setAttributedText:attString]; 

Выход:

enter image description here

+0

Спасибо! Работает. – Raja

0

Заканчивать улучшение @CrazyYoghurt на @Bbrame и @BenoitJadinon на этот предыдущий SO вопрос 3586871 Я использовал его в течение года, и он прекрасно работает , Одно ограничение: я не думаю, что вы можете смело выделить несколько раз одну и ту же строку, если она появляется более одного раза в исходной строке. Но вы, вероятно, можете потратить код, чтобы сделать так, если хотите.

2

Если вам также необходимо отфильтровать некоторое слово из UITextView и сделать его подчеркнутым/изменить цвет этого конкретного текста, то вы можете использовать приведенный ниже код.

Здесь я получаю весь текст документа в строке содержимого и фильтрую определенный текст на иврите.

NSMutableAttributedString *aStr = [[NSMutableAttributedString alloc]initWithString:content attributes:nil]; 
[aStr addAttribute:NSLinkAttributeName value:@"http://www.apple.com" range:[content rangeOfString:@"מדיניות פרטיות"]]; 
[aStr addAttribute:NSLinkAttributeName value:@"http://www.google.com" range:[content rangeOfString:@"לינק"]]; 
textview.linkTextAttributes = @{NSUnderlineStyleAttributeName : @(NSUnderlineStyleSingle)}; 
textview.delegate = (id)self; 

//...You может согласно пользовательского цвета

[aStr addAttribute:NSForegroundColorAttributeName value:[UIColor redColor] range:[content rangeOfString:@"מדיניות פרטיות"]]; 
[aStr addAttribute:NSForegroundColorAttributeName value:[UIColor redColor] range:[content rangeOfString:@"לינק"]]; 

// Здесь Вы можете также добавить водопроводную жест на этот текст. // Tap жест

UITapGestureRecognizer *tapRecognizer = [[UITapGestureRecognizer alloc] initWithTarget:self action:@selector(tappedTextView:)]; 
      [textview addGestureRecognizer:tapRecognizer]; 
      [textview setAttributedText:aStr]; 
      textview.textAlignment=NSTextAlignmentRight; 

// Для получения расположения текста в водопроводном жесте

-(void)tappedTextView:(UITapGestureRecognizer *)tapGesture 

{ 
    UITextView *textView = (UITextView *)tapGesture.view; 
    CGPoint tapLocation = [tapGesture locationInView:textView]; 
    UITextPosition *textPosition = [textView closestPositionToPoint:tapLocation]; 
    NSDictionary *attributes = [textView textStylingAtPosition:textPosition inDirection:UITextStorageDirectionForward]; 
    NSString *urlStr = attributes[NSLinkAttributeName]; 
    if (urlStr) 

    { 
     //[[UIApplication sharedApplication] openURL:[NSURL URLWithString:[NSString stringWithFormat:@"%@",url]]]; 

     PrivacyViewController *next = [PrivacyViewController new]; 
     [self.navigationController pushViewController:next animated:YES]; 
    } 
} 
+0

это сработало для меня. Спасибо! –

+0

Я использовал этот код, и это работает для меня. Благодаря!! –

Смежные вопросы