1. 程式人生 > >iOS開發—使用TYAttributedLabel實現字型大小顏色各異並且帶連結的文字

iOS開發—使用TYAttributedLabel實現字型大小顏色各異並且帶連結的文字

TYAttributedLabel是一個強大的屬性文字控制元件。它支援富文字、圖文混排顯示;它支援行間距、字間距、自適應高度、指定行數;它支援新增高度自定義文字屬性,支援新增屬性文字、自定義連結,新增高亮效果顯示(文字和背景);它還支援新增UIImage和UIView控制元件。

 

使用TYAttributedLabel實現字型大小、顏色各異並且帶連結的文字:

    //屬性文字生成器
    NSString* text = @"Not yet a Finnair Plus member?Learn more or sign up to start enjoying a world of benefits!";
    
    TYTextContainer *textContainer = [[TYTextContainer alloc] init];
    textContainer.text = text;
    textContainer.textColor = [UIColor grayColor];
    textContainer.font = [UIFont boldSystemFontOfSize:11];
    textContainer.linesSpacing = 0.5;
    
    //文字樣式
    TYTextStorage *textStorage = [[TYTextStorage alloc]init];
    textStorage.range = [text rangeOfString:@"Learn more or sign up"];
    textStorage.font = [UIFont boldSystemFontOfSize:11];
    textStorage.textColor = [UIColor blueColor];
    [textContainer addTextStorage:textStorage];
    
    //下劃線文字
    TYLinkTextStorage *linkTextStorage = [[TYLinkTextStorage alloc]init];
    linkTextStorage.range = [text rangeOfString:@"Learn more or sign up"];
    linkTextStorage.linkData = @"登入芬蘭航空";
    //取消下劃線
    linkTextStorage.underLineStyle = kCTUnderlineStyleNone;
    [textContainer addTextStorage:linkTextStorage];
    
    
    TYAttributedLabel *label = [[TYAttributedLabel alloc]initWithFrame:CGRectMake(15, 350, KWidth-30, 0)];
    label.backgroundColor = [UIColor clearColor];
    label.textContainer = textContainer;
    [label sizeToFit];
    //設定代理
    label.delegate = self;
    
    [self.view addSubview:label];

實現代理方法TYAttributedLabelDelegate:

//點選帶連結文字“Learn more or sign up”
-(void)attributedLabel:(TYAttributedLabel *)attributedLabel textStorageClicked:(id<TYTextStorageProtocol>)textStorage atPoint:(CGPoint)point{
    
    if ([textStorage isKindOfClass:[TYLinkTextStorage class]]){
        
        NSString *linkStr = ((TYLinkTextStorage*)textStorage).linkData;
        
        if ([linkStr isEqualToString:@"登入芬蘭航空"]) {
            
            [[ UIApplication sharedApplication] openURL:[NSURL URLWithString:@"https://www.finnair.com/cn/cn/plus"] options:@{} completionHandler:nil];
        }
        
    }
}


效果圖: