ios 如何使用 NSMutableAttributedString 在我的 UITextView 中加粗一些单词?
声明:本页面是StackOverFlow热门问题的中英对照翻译,遵循CC BY-SA 4.0协议,如果您需要使用它,必须同样遵循CC BY-SA许可,注明原文地址和作者信息,同时你必须将它归于原作者(不是我):StackOverFlow
原文地址: http://stackoverflow.com/questions/27997107/
Warning: these are provided under cc-by-sa 4.0 license. You are free to use/share it, But you must attribute it to the original authors (not me):
StackOverFlow
How to bold some words in my UITextView using NSMutableAttributedString?
提问by May Yang
I have a UITextView and there are certain words I'm casting with NSString stringWithFormat that I'd like to be bolded.
我有一个 UITextView 并且有一些我想用 NSString stringWithFormat 铸造的词,我想加粗。
I have looked around Stack Overflow and tried to follow the the postings but I guess I'm not understanding it.
我环顾了 Stack Overflow 并试图按照这些帖子进行操作,但我想我不明白。
Here's what I've been playing around with:
这是我一直在玩的东西:
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];
回答by channi
You can also set it the following way if you want by setting a dictionary as a whole, as attribute
如果需要,您还可以通过将字典作为一个整体设置为属性来按以下方式设置它
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];
回答by Kirit Modi
Use the below code to set Attribute string in TextView.
使用以下代码在 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 :
输出 :
回答by Litome
Check out @CrazyYoghurt improvement on @Bbrame and @BenoitJadinon on this previous SO question 3586871I've been using it for over a year and it works great. One limitation: I don't think you can bold multiple times the same string if it appears more than once in your original string. But you can probably expend the code to make it do so if you wish.
在上一个 SO 问题3586871上查看 @CrazyYoghurt 对 @Bbrame 和 @BenoitJadinon 的改进, 我已经使用它一年多了,效果很好。一个限制:如果同一字符串在原始字符串中出现多次,我认为您不能多次加粗。但是,如果您愿意,您可以使用代码来实现它。
回答by Yash
If you also need to filter some word from the UITextView and make it underline/change color of that particular text only then you can use the below code.
如果您还需要从 UITextView 过滤一些单词并使其下划线/更改特定文本的颜色,那么您可以使用以下代码。
Here, I'm getting all the doc text in the Content string and filter some particular text that is in Hebrew language.
在这里,我将获取 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;
//...You can as per your custom color
//...您可以根据您的自定义颜色
[aStr addAttribute:NSForegroundColorAttributeName value:[UIColor redColor] range:[content rangeOfString:@"??????? ??????"]];
[aStr addAttribute:NSForegroundColorAttributeName value:[UIColor redColor] range:[content rangeOfString:@"????"]];
//Here You can also add the tap gesture on that text. //Tap gesture
//在这里您还可以在该文本上添加点击手势。//点击手势
UITapGestureRecognizer *tapRecognizer = [[UITapGestureRecognizer alloc] initWithTarget:self action:@selector(tappedTextView:)];
[textview addGestureRecognizer:tapRecognizer];
[textview setAttributedText:aStr];
textview.textAlignment=NSTextAlignmentRight;
//For getting the text location in the tap gesture
//用于获取点击手势中的文本位置
-(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];
}
}