Ruby Objective-C
Need help with TTTAttributedLabel?
Click the “chat” button below for chat support from the developer who created it, or find similar developers for support.
TTTAttributedLabel

Description

A drop-in replacement for UILabel that supports attributes, data detectors, links, and more

8.7K Stars 1.6K Forks MIT License 696 Commits 170 Opened issues

Services available

Need anything else?

TTTAttributedLabel

Circle CI Version Status codecov license MIT Platform Carthage compatible

A drop-in replacement for

UILabel
that supports attributes, data detectors, links, and more

TTTAttributedLabel
is a drop-in replacement for
UILabel
providing a simple way to performantly render attributed strings. As a bonus, it also supports link embedding, both automatically with
NSTextCheckingTypes
and manually by specifying a range for a URL, address, phone number, event, or transit information.

Even though

UILabel
received support for
NSAttributedString
in iOS 6,
TTTAttributedLabel
has several unique features:
  • Automatic data detection
  • Manual link embedding
  • Label style inheritance for attributed strings
  • Custom styling for links within the label
  • Long-press gestures in addition to tap gestures for links

It also includes advanced paragraph style properties:

  • attributedTruncationToken
  • firstLineIndent
  • highlightedShadowRadius
  • highlightedShadowOffset
  • highlightedShadowColor
  • lineHeightMultiple
  • lineSpacing
  • minimumLineHeight
  • maximumLineHeight
  • shadowRadius
  • textInsets
  • verticalAlignment

Requirements

  • iOS 8+ / tvOS 9+
  • Xcode 7+

Accessibility

As of version 1.10.0,

TTTAttributedLabel
supports VoiceOver through the
UIAccessibilityElement
protocol. Each link can be individually selected, with an
accessibilityLabel
equal to its string value, and a corresponding
accessibilityValue
for URL, phone number, and date links. Developers who wish to change this behavior or provide custom values should create a subclass and override
accessibilityElements
.

Communication

  • If you need help, use Stack Overflow. (Tag
    tttattributedlabel
    )
  • If you'd like to ask a general question, use Stack Overflow.
  • If you found a bug, open an issue.
  • If you have a feature request, open an issue.
  • If you want to contribute, submit a pull request.

Installation

CocoaPods is the recommended method of installing

TTTAttributedLabel
. Simply add the following line to your
Podfile
:
# Podfile

pod 'TTTAttributedLabel'

Usage

TTTAttributedLabel
can display both plain and attributed text: just pass an
NSString
or
NSAttributedString
to the
setText:
setter. Never assign to the
attributedText
property.
// NSAttributedString

TTTAttributedLabel *attributedLabel = [[TTTAttributedLabel alloc] initWithFrame:CGRectZero];

NSAttributedString *attString = [[NSAttributedString alloc] initWithString:@"Tom Bombadil" attributes:@{ (id)kCTForegroundColorAttributeName : (id)[UIColor redColor].CGColor, NSFontAttributeName : [UIFont boldSystemFontOfSize:16], NSKernAttributeName : [NSNull null], (id)kTTTBackgroundFillColorAttributeName : (id)[UIColor greenColor].CGColor }];

// The attributed string is directly set, without inheriting any other text // properties of the label. attributedLabel.text = attString;

// NSString

TTTAttributedLabel *label = [[TTTAttributedLabel alloc] initWithFrame:CGRectZero]; label.font = [UIFont systemFontOfSize:14]; label.textColor = [UIColor darkGrayColor]; label.lineBreakMode = NSLineBreakByWordWrapping; label.numberOfLines = 0;

// If you're using a simple NSString for your text, // assign to the text property last so it can inherit other label properties. NSString *text = @"Lorem ipsum dolor sit amet"; [label setText:text afterInheritingLabelAttributesAndConfiguringWithBlock:^ NSMutableAttributedString *(NSMutableAttributedString *mutableAttributedString) { NSRange boldRange = [[mutableAttributedString string] rangeOfString:@"ipsum dolor" options:NSCaseInsensitiveSearch]; NSRange strikeRange = [[mutableAttributedString string] rangeOfString:@"sit amet" options:NSCaseInsensitiveSearch];

// Core Text APIs use C functions without a direct bridge to UIFont. See Apple's "Core Text Programming Guide" to learn how to configure string attributes. UIFont *boldSystemFont = [UIFont boldSystemFontOfSize:14]; CTFontRef font = CTFontCreateWithName((__bridge CFStringRef)boldSystemFont.fontName, boldSystemFont.pointSize, NULL); if (font) { [mutableAttributedString addAttribute:(NSString *)kCTFontAttributeName value:(__bridge id)font range:boldRange]; [mutableAttributedString addAttribute:kTTTStrikeOutAttributeName value:@YES range:strikeRange]; CFRelease(font); }

return mutableAttributedString; }];

First, we create and configure the label, the same way you would instantiate

UILabel
. Any text properties that are set on the label are inherited as the base attributes when using the
-setText:afterInheritingLabelAttributesAndConfiguringWithBlock:
method. In this example, the substring "ipsum dolar", would appear in bold, such that the label would read "Lorem ipsum dolar sit amet", in size 14 Helvetica, with a dark gray color.

IBDesignable

TTTAttributedLabel
includes
IBInspectable
and
IB_DESIGNABLE
annotations to enable configuring the label inside Interface Builder. However, if you see these warnings when building...
IB Designables: Failed to update auto layout status: Failed to load designables from path (null)
IB Designables: Failed to render instance of TTTAttributedLabel: Failed to load designables from path (null)

...then you are likely using

TTTAttributedLabel
as a static library, which does not support IB annotations. Some workarounds include:
  • Install
    TTTAttributedLabel
    as a dynamic framework using CocoaPods with
    use_frameworks!
    in your
    Podfile
    , or with Carthage
  • Install
    TTTAttributedLabel
    by dragging its source files to your project

Links and Data Detection

In addition to supporting rich text,

TTTAttributedLabel
can automatically detect links for dates, addresses, URLs, phone numbers, transit information, and allows you to embed your own links.
label.enabledTextCheckingTypes = NSTextCheckingTypeLink; // Automatically detect links when the label text is subsequently changed
label.delegate = self; // Delegate methods are called when the user taps on a link (see `TTTAttributedLabelDelegate` protocol)

label.text = @"Fork me on GitHub! (https://github.com/mattt/TTTAttributedLabel/)"; // Repository URL will be automatically detected and linked

NSRange range = [label.text rangeOfString:@"me"]; [label addLinkToURL:[NSURL URLWithString:@"http://github.com/mattt/"] withRange:range]; // Embedding a custom link in a substring

Demo

pod try TTTAttributedLabel

...or clone this repo and build and run/test the

Espressos
project in Xcode to see
TTTAttributedLabel
in action. If you don't have CocoaPods installed, grab it with
[sudo] gem install cocoapods
.
cd Example
pod install
open Espressos.xcworkspace

License

TTTAttributedLabel
is available under the MIT license. See the LICENSE file for more info.

We use cookies. If you continue to browse the site, you agree to the use of cookies. For more information on our use of cookies please see our Privacy Policy.