iOS 富文本初探

有的时候啊,我们需要在一行或者多行文本中显示不同颜色,不同字号的文字,甚至于有的需要点击,有的不需要。这统称为富文本。

在网页中,有很多类似的应用。除开网页,我现在遇到的这种情况也是非用不可,用户政策和用户协议在多语言的实现中,考虑到自适应,就必须显示在同一个控件中(UILabel/UITextView).

NSMutableAttributedString/NSAttributedString用来表示富文本。

不如我们有一段文本,中间有两段是要求不同颜色显示,可以点击的,因为是国际化,每一段的长度都不一样,所以索性全部拆开了。

var attrDic1 = [NSFontAttributeName: UIFont.systemFontOfSize(15)]

var str1 = NSLocalizedString("register prompt first segment", comment: "register prompt first segment")

var attrDic2 = [NSFontAttributeName: UIFont.systemFontOfSize(15), NSForegroundColorAttributeName: UIColor(red: 59/255, green: 126/255, blue: 55/255, alpha: 1), NSLinkAttributeName:"http://www.baidu.com"]

var str2 = NSLocalizedString("register prompt second segment", comment: "register prompt second segment")

var attrDic3 = [NSFontAttributeName: UIFont.systemFontOfSize(15)]

var str3 = NSLocalizedString("register prompt three segment", comment: "register prompt three segment")

var attrDic4 = [NSFontAttributeName: UIFont.systemFontOfSize(15), NSForegroundColorAttributeName: UIColor(red: 59/255, green: 126/255, blue: 55/255, alpha: 1), NSLinkAttributeName:"http://www.baidu.com"]

var str4 = NSLocalizedString("register prompt four segment", comment: "register prompt four segment")

var attrDic5 = [NSFontAttributeName: UIFont.systemFontOfSize(15)]

var str5 = NSLocalizedString("register prompt five segment", comment: "register prompt five segment")

var allStr = str1+str2+str3+str4+str5

var attrStr1 = NSMutableAttributedString(string: str1, attributes: attrDic1)

var attrStr2 = NSMutableAttributedString(string: str2, attributes: attrDic2)

var attrStr3 = NSMutableAttributedString(string: str3, attributes: attrDic3)

var attrStr4 = NSMutableAttributedString(string: str4, attributes: attrDic4)

var attrStr5 = NSMutableAttributedString(string: str5, attributes: attrDic5)

attrStr1.appendAttributedString(attrStr2);

attrStr1.appendAttributedString(attrStr3);

attrStr1.appendAttributedString(attrStr4);

attrStr1.appendAttributedString(attrStr5);

vPromptTextView.attributedText = attrStr1

//        vPromptTextView.linkTextAttributes = attrDic2

//        vPromptTextView.userInteractionEnabled = true

//        vPromptTextView.scrollEnabled = false

//        vPromptTextView.editable = false

//        vPromptTextView.selectable = true

//        vPromptTextView.textContainer.lineFragmentPadding = 0

//        vPromptTextView.textContainerInset = UIEdgeInsetsMake(0, 0, 0, 0)

//        vPromptTextView.delegate = self;

vPromptTextView.textAlignment = NSTextAlignment.Center

//        vPromptTextView.dataDetectorTypes = UIDataDetectorTypes.All

var tap = UITapGestureRecognizer(target: self, action: "tappedTextView:")

vPromptTextView.addGestureRecognizer(tap)

这里是5段内容,使用了国际化,UILabel说是不能点击,事实上,我把所有的注释都打开,同时实现了了UITextView的委托,也没办法点击,好吧,我不知道问题在哪里。据网上搜索到的内容讲,可以点击之后,也就是用safiri打开一段链接,这样的话和我的实际应用场景有差别,所以使用了tapgesture的方式,看看具体实现:

func tappedTextView(tapGesture:UITapGestureRecognizer){

if tapGesture.state != UIGestureRecognizerState.Ended {

return

}

var textView = tapGesture.view as UITextView

var tapLocation = tapGesture.locationInView(textView)

var textPosition = textView.closestPositionToPoint(tapLocation)

var attributes = textView.textStylingAtPosition(textPosition, inDirection: UITextStorageDirection.Backward)

if let url = attributes[NSLinkAttributeName] as? String{

//            UIApplication.sharedApplication().openURL(NSURL(string: url)!)

link = url

self.performSegueWithIdentifier("openLink", sender: self)

}

}

这样就可以实现我自己想要的内容的,也可以实现内部点击。

图文混排下一步就是core text 渲染,这个内容还是很丰富的。

iOS7 新增了TextKit,是在Core Text之上进行了封装。

iOS的内容是相当丰富的,是在不敢称iOS高手了,学的越多,发现不知道的东西越多。

最后,推荐两个第三方库

两个库:DTCoreText=> http://blog.cnbang.net/tech/2630/

TTTAttributedLabel=> https://github.com/TTTAttributedLabel/TTTAttributedLabel

时间: 2024-10-18 05:05:00

iOS 富文本初探的相关文章

iOS富文本组件的实现—DTCoreText源码解析 数据篇

本文转载 http://blog.cnbang.net/tech/2630/ DTCoreText是个开源的iOS富文本组件,它可以解析HTML与CSS最终用CoreText绘制出来,通常用于在一些需要显示富文本的场景下代替低性能的UIWebView,来看看它是怎样解析和渲染HTML+CSS的,总体上分成两步: 数据解析—把HTML+CSS转换成NSAttributeString 渲染—用CoreText把NSAttributeString内容渲染出来,再加上图片等元素 本篇先介绍第一步,数据解

iOS 富文本

富文本 http://pan.baidu.com/s/1pJnY8BL 把这里下载的文件夹拖进自己的工程 引入头文件 #import "OHAttributedLabel.h" #import "OHParagraphStyle.h" #import "OHTouchesGestureRecognizer.h" 引入这3个头文件 添加 CoreText.framework // 创建富文本string NSMutableAttributedStr

iOS 富文本格式字符 以及处理iOS8下textview设置富文本后输入bug

iOS的富文本设置,在iOS8下在textView的代理方法中设置textview的attributedText时,会出现富文本格式未加到text上的情况,可以在初始化时将文本属性赋给textview的typingAttributes.代码如下: NSMutableParagraphStyle *paragraphStyle = [[NSMutableParagraphStyle alloc] init]; paragraphStyle.lineSpacing = 7;// 字体的行间距 UIF

ios富文本

之前做项目时遇到一个问题: 使用UITextView显示一段电影的简介,由于字数比较多,所以字体设置的很小,行间距和段间距也很小,一大段文字挤在一起看起来很别扭,想要把行间距调大,结果在XCode中查遍其所有属性才发现,UITextView居然没有调整行间距的接口,于是忍住不心里抱怨了一下下. 但是问题还是要解决的,上网一查才发现,iOS不仅有富文本处理的功能,而且对于文字排版的处理能力那是相当的强大,看来我是孤陋寡闻了. 正题开始之前插播一点基础知识: 在iOS中或者Mac OS X中怎样才能

iOS 富文本类库RTLabel

本文转载至 http://blog.csdn.net/duxinfeng2010/article/details/9004749 本节关于RTLable基本介绍,原文来自 https://github.com/honcheng/RTLabel RTLabel 基于富文本的格式,适用于iOS,类似HTML的标记. RTLabel 基于UILabel类的拓展,能够支持Html标记的富文本显示,它是基于Core Text,因此也支持Core Text上的一些东西. 特点 粗体和斜体 颜色和大小 下划线

IOS 富文本 ,设置行间距、字间距,计算高度(转载组合而成)

一 计算高度 -(CGFloat)getSpaceLabelHeight:(NSString*)str withFont:(UIFont*)font withWidth:(CGFloat)width { NSMutableParagraphStyle *paraStyle = [[NSMutableParagraphStyle alloc] init]; paraStyle.lineBreakMode = NSLineBreakByCharWrapping; paraStyle.alignmen

iOS富文本-NSAttributedString简单封装

直接调用系统的写起来比较麻烦,封装一下 因为要简单所以就写类方法 WJAttributeStyle 基类 #import <Foundation/Foundation.h>#import <UIKit/UIKit.h>/** *  基类富文本 */@interface WJAttributeStyle : NSObject @property (nonatomic,strong)NSString *attributeName;@property (nonatomic,strong)

iOS富文本的使用

NSString *name = nil; if (_payNumber == 1) { name = [NSString stringWithFormat:@"向%@收款",nameStr]; }else if (_payNumber == 2){ name = [NSString stringWithFormat:@"向%@付款",nameStr]; } //富文本 NSMutableAttributedString *abs = [[NSMutableAttr

iOS 富文本样式总结

富文本的使用: //价格富文本 NSString *string = [NSString stringWithFormat:@"¥1805646.31"]; NSMutableAttributedString *str = [[NSMutableAttributedString alloc] initWithString:string]; [str addAttribute:NSFontAttributeName value:[UIFont systemFontOfSize:15] r