web-dev-qa-db-ja.com

NSMutableAttributedStringを使用してUITextViewのいくつかの単語を太字にする方法は?

UITextViewがあり、太字にしたい特定の単語がNSString stringWithFormatでキャストしています。

私はスタックオーバーフローを見回して投稿をフォローしようとしましたが、私はそれを理解していません。

これが私がいじっていたものです:

    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];
12
May Yang

辞書全体を属性として設定する場合は、次のように設定することもできます

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];
21
channi

以下のコードを使用して、TextViewで属性文字列を設定します。

    NSString *infoString =@"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];

OutPut:

enter image description here

6
Kirit Modi

この以前の@Bbrameと@BenoitJadinonの@CrazyYoghurtの改善点を確認してくださいSO質問 586871 1年以上使用しており、うまく機能しています。1つの制限:元の文字列に2回以上出現する場合は、同じ文字列を複数回太字にできないと思いますが、必要に応じて、コードを拡張してそうすることができます。

0
Litome

UITextViewから一部のWordをフィルタリングし、その特定のテキストのみに下線/色を変更する必要がある場合は、以下のコードを使用できます。

ここでは、Content文字列のすべてのドキュメントテキストを取得し、ヘブライ語の特定のテキストをフィルター処理しています。

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;

// ...あなたはあなたのカスタムカラーに従ってすることができます

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

//ここでは、そのテキストにタップジェスチャーを追加することもできます。 //ジェスチャーをタップ

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
Yash