在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; }