I am creating an app in which i have to implement functionality like this:
1) Write into textview
2) Select text from textview
3) Allow user to apply bold,italic and underline functionality on selected text.
I have started implementing it using NSMutableAttributedString. It's working for bold and italic but replaces the textview text with only selected text.
-(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;
}
Can anybody please help me out to implement this functionality?
Thanks in advance.
You should not use
didChangeSelection
for this purpose. UseshouldChangeTextInRange
instead.This is because when you set the attributed string to new one you don't replace the text of certain location. You replace full text with your new text. You need range to locate the position where you want the text changed.