Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Underline text in a UITextView

How can I underline text in a UITextView. I understand that I would need to create a subclass of UITextView, but what would go under drawRect:?

Thanks.

like image 558
James Anderson Avatar asked Oct 28 '12 20:10

James Anderson


4 Answers

If this is static text, you can underline it in Interface Builder. Make sure to make the text 'Attributed' first by selecting 'Attributed' in the drop down menu:

enter image description here

like image 156
Adam Johns Avatar answered Oct 23 '22 18:10

Adam Johns


Try to use NSAttributedString as follows and set in UITextView. This works for iOS6.

NSMutableAttributedString *attString = [[NSMutableAttributedString alloc] initWithString:@"Some String"];
[attString addAttribute:(NSString*)kCTUnderlineStyleAttributeName 
                   value:[NSNumber numberWithInt:kCTUnderlineStyleSingle] 
                   range:(NSRange){0,[attString length]}];

For more info on NSAttributedString check this How do you use NSAttributedString?

For eg:-

textView.attributedText = attString;

From apple documentation on UITextView,

In iOS 6 and later, this class supports multiple text styles through use of the attributedText property. (Styled text is not supported in earlier versions of iOS.) Setting a value for this property causes the text view to use the style information provided in the attributed string. You can still use the font, textColor, and textAlignment properties to set style attributes, but those properties apply to all of the text in the text view.

attributedText:

The styled text displayed by the text view.

@property(nonatomic,copy) NSAttributedString *attributedText

Discussion: This property is nil by default. Assigning a new value to this property also replaces the value of the text property with the same string data, albeit without any formatting information. In addition, assigning a new a value updates the values in the font, textColor, and textAlignment properties so that they reflect the style information starting at location 0 in the attributed string.

like image 23
iDev Avatar answered Oct 23 '22 19:10

iDev


You can't use "kCTUnderlineStyleAttributeName" or "kCTUnderlineStyleSingle" Now you must do it like this:

    NSMutableAttributedString *attString = [[NSMutableAttributedString alloc] initWithString:@"Text"];
[attString addAttribute:NSUnderlineStyleAttributeName
                  value:@(NSUnderlineStyleSingle)
                  range:(NSRange){0,[attString length]}];
like image 37
Tayo119 Avatar answered Oct 23 '22 19:10

Tayo119


textViewMessage.linkTextAttributes = @{NSForegroundColorAttributeName: [UIColor blueColor], NSUnderlineStyleAttributeName: [NSNumber numberWithInt:NSUnderlineStyleSingle]};
like image 20
jose920405 Avatar answered Oct 23 '22 19:10

jose920405