本文语法为Swift4
前言
AttributedString
可以分为NSAttributedString
和NSMutableAttributedString
两种。
在使用中通过将AttributedString
赋值给控件的 attributedText
属性来添加文字样式。
可设置的控件有UILabel
、UITextField
和UITextView
。
Swift使用
简单示例
1 | let mutableAttributedString = NSMutableAttributedString(); |
也可以在定义后再添加样式
1 | mutableAttributedString.addAttributes(strAttr, range: NSRange(location: 0, length: mutableAttributedString.length)); |
所有可设置样式
简单样式
1 | //设置字体 |
段落样式
1 | let paragraphStyle = NSMutableParagraphStyle(); |
OC使用
初始化
1 | NSMutableAttributedString *attributedString = [[NSMutableAttributedString alloc]init]; |
设置字体格式和大小
1 | NSString *str0 = @"设置字体格式和大小"; |
设置字体颜色
1 | NSString *str1 = @"\n设置字体颜色\n"; |
设置字体背景颜色
1 | NSString *str2 = @"设置字体背景颜色\n"; |
设置连体属性
1 | /* |
设置字符之间的间距
1 | /*! |
设置删除线
1 | /*! |
1 | NSString *str52 = @"\n设置删除线为粗单实线,颜色为红色"; |
1 | NSString *str53 = @"\n设置删除线为细单实线,颜色为红色"; |
1 | NSString *str54 = @"\n设置删除线为细单虚线,颜色为红色"; |
设置笔画宽度和填充颜色
1 | /*! |
设置阴影属性
1 | NSString *str7 = @"设置阴影属性\n"; |
设置文本特殊效果
1 | //设置文本特殊效果,取值为NSString类型,目前只有一个可用效果 |
图文混排
1 | //聊天的表情文字混排 |
添加下划线
1 | /*! |
设置基线偏移值
1 | /*! |
设置字体倾斜度
1 | /*! |
设置字体的横向拉伸
1 | /*! |
设置文字的书写方向
1 | /*! |
设置文字排版方向
1 | /*! |
设置段落样式
1 | //段落样式 |
应用
1 | UILabel *label = [[UILabel alloc]initWithFrame:CGRectMake(60, 100, 300, 0)]; |
OC使用之超链接
之所以把 NSLinkAttributeName
属性单独列出来,是因为在 UILabel
和 UITextField
中是无法使用该属性的。
更准确点说是在UILabel
和 UITextField
中无法实现点击链接启动浏览器打开一个URL地址,因为在此过程中用到了一个代理函数。只能用在 UITextView
中。
NSLinkAttributeName
的对象是 NSURL
类型 或 NSString
,但是优先使用 NSURL
。
需要实现UITextView
的代理方法- (BOOL)textView:(UITextView *)textView shouldInteractWithURL:(NSURL *)URL inRange:(NSRange)characterRange
,
在该方法中,返回 YES
,则会打开URL地址,返回 NO
则不会。
设置方式一
将全部文字设置为链接(可点击)
1 | NSDictionary *dictAttr = @{NSLinkAttributeName:[NSURL URLWithString:@"http://www.jianshu.com"]}; |
设置方式二
将部分文字设置为链接
1 | NSString *str = @"跳转到简书"; |
代理回调方法
1 | - (BOOL)textView:(UITextView *)textView shouldInteractWithURL:(NSURL *)URL inRange:(NSRange)characterRange |
注意:
- 实现
textView
的代理,否则调不到回调方法。 - 设置
textView
的editable
属性为NO
,在可编辑的状态下是不可点击的。 - 在模拟器环境下一直无法点击,在真机上是正常的,不知道是不是模拟器不支持。