在iOS中的UITextView的选定文本上应用富文本格式

我正在创build一个应用程序,我必须实现这样的function:

1)写入textview

2)从textview中select文本

3)允许用户在选定的文本上应用粗体,斜体和下划线function。

我已经开始使用NSMutableAttributedString来实现它。 它的工作方式为粗体和斜体,但只用选定的文本replacetextview文本。

-(void) textViewDidChangeSelection:(UITextView *)textView { rangeTxt = textView.selectedRange; selectedTxt = [textView textInRange:textView.selectedTextRange]; NSLog(@"selectedText: %@", selectedTxt); } -(IBAction)btnBold:(id)sender { UIFont *boldFont = [UIFont boldSystemFontOfSize:self.txtNote.font.pointSize]; NSDictionary *boldAttr = [NSDictionary dictionaryWithObject:boldFont forKey:NSFontAttributeName]; NSMutableAttributedString *attributedText = [[NSMutableAttributedString alloc]initWithString:selectedTxt attributes:boldAttr]; txtNote.attributedText = attributedText; } 

任何人都可以帮我实现这个function吗?

提前致谢。

您不应该为此使用didChangeSelection 。 改用shouldChangeTextInRange

这是因为当您将属性string设置为新string时,您不会replace某个位置的文本。 用新文字replace全文。 您需要范围来find您想要文本更改的位置。

 - (BOOL)textView:(UITextView *)textView shouldChangeTextInRange:(NSRange)range replacementText:(NSString *)text{ NSMutableAttributedString *textViewText = [[NSMutableAttributedString alloc]initWithAttributedString:textView.attributedText]; NSRange selectedTextRange = [textView selectedRange]; NSString *selectedString = [textView textInRange:textView.selectedTextRange]; //lets say you always want to make selected text bold UIFont *boldFont = [UIFont boldSystemFontOfSize:self.txtNote.font.pointSize]; NSDictionary *boldAttr = [NSDictionary dictionaryWithObject:boldFont forKey:NSFontAttributeName]; NSMutableAttributedString *attributedText = [[NSMutableAttributedString alloc]initWithString:selectedString attributes:boldAttr]; // txtNote.attributedText = attributedText; //don't do this [textViewText replaceCharactersInRange:range withAttributedString:attributedText]; // do this textView.attributedText = textViewText; return false; }