NSMutableAttributedString

简介: <p style="margin-top:0px; margin-bottom:10px; padding-top:0px; padding-bottom:0px; line-height:28px; color:rgb(102,102,102); font-size:16px"> <span style="font-family:'Courier New'"><span lang="Z

iOS开发中,常常会有一段文字显示不同的颜色和字体,或者给某几个文字加删除线或下划线的需求。之前在网上找了一些资料,有的是重绘UILabeltextLayer,有的是用html5实现的,都比较麻烦,而且很多UILabel的属性也不起作用了,效果都不理想。后来了解到NSMuttableAttstring(带属性的字符串),上面的一些需求都可以很简便的实现。

1.实例化方法和使用方法

实例化方法:

使用字符串初始化

- (id)initWithString:(NSString *)str;

例:

NSMutableAttributedString *AttributedStr = [[NSMutableAttributedStringalloc]initWithString:@"今天天气不错呀"];


- (id)initWithString:(NSString *)str attributes:(NSDictionary *)attrs;


字典中存放一些属性名和属性值,如:

NSDictionary *attributeDict = [NSDictionarydictionaryWithObjectsAndKeys:

                                    [UIFontsystemFontOfSize:15.0],NSFontAttributeName,

                                    [UIColorredColor],NSForegroundColorAttributeName,

                                   NSUnderlineStyleAttributeName,NSUnderlineStyleSingle,nil];

NSMutableAttributedString *AttributedStr = [[NSMutableAttributedStringalloc]initWithString:@"今天天气不错呀" attributes:attributeDict];

- (id)initWithAttributedString:(NSAttributedString *)attester;

使用NSAttributedString初始化,跟NSMutableString,NSString类似


使用方法:

为某一范围内文字设置多个属性

- (void)setAttributes:(NSDictionary *)attrs range:(NSRange)range;

为某一范围内文字添加某个属性

- (void)addAttribute:(NSString *)name value:(id)value range:(NSRange)range;

为某一范围内文字添加多个属性

- (void)addAttributes:(NSDictionary *)attrs range:(NSRange)range;

移除某范围内的某个属性

- (void)removeAttribute:(NSString *)name range:(NSRange)range;

2.     常见的属性及说明

NSFontAttributeName 字体

NSParagraphStyleAttributeName 段落格式 

NSForegroundColorAttributeName 字体颜色

NSBackgroundColorAttributeName  背景颜色

NSStrikethroughStyleAttributeName删除线格式

NSUnderlineStyleAttributeName     下划线格式

NSStrokeColorAttributeName       删除线颜色

NSStrokeWidthAttributeName删除线宽度

NSShadowAttributeName 阴影

更多方法和属性说明详见苹果官方说明文档:

https://developer.apple.com/library/ios/documentation/Cocoa/Reference/Foundation/Classes/NSMutableAttributedString_Class/Reference/Reference.html#//apple_ref/doc/uid/TP40003689


另外,其他可以设置text 的控件(如UIButtonUITextField)也都有该属性,该文章不够详细,只是简单介绍,其他效果的实现参考API中更多的属性及使用方法。


目录
相关文章
|
Java p3c
【Java用法】请使用System.currentTimeMillis()代替new Date().getTime()
【Java用法】请使用System.currentTimeMillis()代替new Date().getTime()
270 0
|
7月前
|
自动驾驶 安全 决策智能
18k个视频、专为自动驾驶世界模型设计,DrivingDojo数据集来了
DrivingDojo是首个专为训练复杂驾驶动态交互式世界模型设计的大规模驾驶视频数据集,包含约18k个视频,覆盖多城市、多天气条件下的驾驶场景。它注重丰富的纵向与横向驾驶操作、多智能体交互及开放世界罕见事件(如动物横穿马路)。此外,研究团队还提出动作指令跟随(AIF)基准,用于评估世界模型的预测能力。尽管数据集在多样性上取得突破,但仍存在局限性,例如主要依赖前视摄像头数据。DrivingDojo为自动驾驶世界模型的研究提供了重要平台,但也提醒我们关注技术集成、计算成本及社会伦理等挑战。
146 22
EMQ
|
网络协议 安全 物联网
QUIC 协议:特性、应用场景及其对物联网/车联网的影响
了解 QUIC 协议的特性优势与应用场景,以及新一代物联网传输协议 MQTT over QUIC 如何为各类消息传输场景带来提升。
EMQ
1060 1
QUIC 协议:特性、应用场景及其对物联网/车联网的影响
|
11月前
与forEach方法相比,使用for循环遍历数组有哪些优缺点?
总的来说,for 循环和 forEach 方法各有其适用场景。在简单的遍历任务中,forEach 方法更为简洁方便;而在需要更灵活控制循环过程或进行复杂操作的场景中,for 循环可能更为合适。在实际开发中,我们需要根据具体情况选择合适的方法来遍历数组,以达到最佳的效果。同时,随着技术的不断发展和编程理念的更新,我们也需要不断学习和掌握新的方法和技巧,以更好地应对各种编程挑战。
230 63
|
9月前
|
人工智能 调度 芯片
PAI训练服务:云上大模型训练新篇章
本文介绍了通用AI时代下的新训练方法及PAI平台的优化。随着大模型时代的到来,算力需求激增,硬件和网络通信成为瓶颈。PAI平台通过自动容错、3D健康检测等技术确保训练稳定性;通过资源配额、智能调度等提高性价比;并推出PAI-TorchAcc和PAI-ChatLearn两大引擎,分别实现高效训练加速和灵活的对齐训练,显著提升训练性能与效果。这些改进解决了大规模AI训练中的关键问题,提升了效率和稳定性。
|
Linux
BUU [安洵杯 2019]easy_web
BUU [安洵杯 2019]easy_web
243 0
|
搜索推荐 程序员 开发工具
Emacs Verilog mode 简单使用指南
【6月更文挑战第17天】Emacs Verilog mode 提升Verilog编程体验,提供语法高亮、代码补全、自动缩进等功能。安装可通过`M-x package-install RET verilog-mode`。常见问题包括补全不生效、高亮不准确,可通过调整配置解决。支持模板插入、代码折叠、错误高亮、代码跳转。通过个性化配置、整合Git、集成其他工具和社区资源,实现高效Verilog开发。Emacs学习曲线虽陡,但效能提升显著。
379 4
|
12月前
|
机器学习/深度学习 供应链 监控
深度学习之实时库存管理
基于深度学习的实时库存管理在电商、零售、制造业和物流等多个行业中具有极高的应用价值。深度学习模型可以帮助企业实时监测库存动态、优化库存补充决策、预测需求波动,确保库存水平稳定且适合实际需求,从而降低成本、提高客户满意度。以下从核心技术、常见应用场景、技术挑战及未来发展方向进行详细说明。
669 3
|
算法 安全 调度
操作系统中的死锁、饥饿和优先级反转
【8月更文挑战第23天】
476 0
|
机器学习/深度学习 人工智能 编解码
原来Stable Diffusion是这样工作的
初中生都能听懂的Stable Diffusion的工作原理,看完还不会你来找我
原来Stable Diffusion是这样工作的