2.30 Constructing and Displaying Styled Texts

本文介绍如何利用NSAttributedString在iOS中实现复杂文本样式,包括加粗、改变颜色、背景色及添加阴影效果,通过代码实例展示具体实现过程,并探讨其在不同场景的应用。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

想象一下,一个UILabel上的一段文本有两个字比较重要,老板说这两个字要加粗,还有另外两个字要提示下,要加下划线。该怎么做呢?
很简单吗,分成几个Label来显示不就行了。你说对了,但一旦文本内容稍微有点变化,你可能就要调整各个label的位置了。有没有更好的办法呢?IOS提供了NSAttributedString来解决这类事情,它只需要一个label就可以把这些全搞定。天啊,他是怎么做到的。我也不知道他是怎么做到的,不过我们先来知道下怎么用。对了,他可不仅仅能用在label上哦。

富文本从来就是个很传奇的东西,可能你会想用WebView来显示富文本。一则比较慢,二则他展示的效果可能不是你想要的。最后,从ios6开始,我们可以使用attributed strings。据说这在mac上早就有了。

假设我们想显示文本“IOS SDK”
"IOS"部分显示要求
1,加粗 60号
2,背景黑色
3,前景红色
"SDK"部分显示要求
1,加粗 60号
2,白色文本
3,灰色阴影

--书上代码如下--

- (NSAttributedString *) attributedText{
NSString *string = @"iOS SDK";
NSMutableAttributedString *result = [[NSMutableAttributedString alloc]
initWithString:string];
NSDictionary *attributesForFirstWord = @{
NSFontAttributeName : [UIFont boldSystemFontOfSize:60.0f],
NSForegroundColorAttributeName : [UIColor redColor],
NSBackgroundColorAttributeName : [UIColor blackColor]
};
NSShadow *shadow = [[NSShadow alloc] init];
shadow.shadowColor = [UIColor darkGrayColor];
shadow.shadowOffset = CGSizeMake(4.0f, 4.0f);
NSDictionary *attributesForSecondWord = @{
NSFontAttributeName : [UIFont boldSystemFontOfSize:60.0f],
NSForegroundColorAttributeName : [UIColor whiteColor],
NSBackgroundColorAttributeName : [UIColor redColor],
NSShadowAttributeName : shadow
};
/* Find the string "iOS" in the whole string and sets its attribute */
[result setAttributes:attributesForFirstWord
range:[string rangeOfString:@"iOS"]];
/* Do the same thing for the string "SDK" */
[result setAttributes:attributesForSecondWord
range:[string rangeOfString:@"SDK"]];
return [[NSAttributedString alloc] initWithAttributedString:result];

}
- (void)viewDidLoad{
[super viewDidLoad];
self.view.backgroundColor = [UIColor whiteColor];
self.label = [[UILabel alloc] init];
self.label.backgroundColor = [UIColor clearColor];
self.label.attributedText = [self attributedText];
[self.label sizeToFit];
self.label.center = self.view.center;
[self.view addSubview:self.label];
}
@end

我们来看看NSMutableAttributedString 的setAttributes: range: 方法
Attributes参数是个NSDictionary类,在dictionary里面指定文本显示的字体大小,颜色,背景色等。rang用来指定对哪些字符应用这套dictionary方案。

 

 

 

 

 

 

 

 


 

资源下载链接为: https://pan.quark.cn/s/d9ef5828b597 在本文中,我们将探讨如何通过 Vue.js 实现一个带有动画效果的“回到顶部”功能。Vue.js 是一款用于构建用户界面的流行 JavaScript 框架,其组件化和响应式设计让实现这种交互功能变得十分便捷。 首先,我们来分析 HTML 代码。在这个示例中,存在一个 ID 为 back-to-top 的 div 元素,其中包含两个 span 标签,分别显示“回到”和“顶部”文字。该 div 元素绑定了 Vue.js 的 @click 事件处理器 backToTop,用于处理点击事件,同时还绑定了 v-show 指令来控制按钮的显示与隐藏。v-cloak 指令的作用是在 Vue 实例渲染完成之前隐藏该元素,避免出现闪烁现象。 CSS 部分(backTop.css)主要负责样式设计。它首先清除了一些默认的边距和填充,对 html 和 body 进行了全屏布局,并设置了相对定位。.back-to-top 类则定义了“回到顶部”按钮的样式,包括其位置、圆角、阴影、填充以及悬停时背景颜色的变化。此外,与 v-cloak 相关的 CSS 确保在 Vue 实例加载过程中隐藏该元素。每个 .page 类代表一个页面,每个页面的高度设置为 400px,用于模拟多页面的滚动效果。 接下来是 JavaScript 部分(backTop.js)。在这里,我们创建了一个 Vue 实例。实例的 el 属性指定 Vue 将挂载到的 DOM 元素(#back-to-top)。data 对象中包含三个属性:backTopShow 用于控制按钮的显示状态;backTopAllow 用于防止用户快速连续点击;backSeconds 定义了回到顶部所需的时间;showPx 则规定了滚动多少像素后显示“回到顶部”按钮。 在 V
### 构造对象的概念 在编程中,构造对象通常涉及创建类的一个实例并初始化其属性。这一过程通过调用类中的特殊方法——即构造函数来完成。构造函数的主要作用是在对象被创建时执行必要的初始化操作。 #### 面向对象编程中的构造器 在一个典型的面向对象语言(如Java或SystemVerilog)中,可以通过定义一个具有特定名称的构造函数来实现对象的构建[^1]。例如,在引用的内容中提到 `class ClassA` 的定义中隐含了一个构造逻辑的存在。虽然未显式展示,但在实际应用中,构造函数可能类似于以下形式: ```verilog class ClassA; int value; function new(int init_value); this.value = init_value; // 初始化成员变量 endfunction : new endclass ``` 上述代码展示了如何通过 `new` 函数作为构造函数来初始化 `value` 属性。当一个新的 `ClassA` 对象被创建时,会自动调用此构造函数,并传入初始值以设置该对象的状态。 #### 数据结构与算法视角下的对象构造 从数据结构的角度来看,构造对象不仅限于简单的赋值行为,还涉及到复杂的数据管理策略。例如,数组和链表这样的基础数据结构可以用来表示更高级别的抽象数据类型,比如栈、队列或者二叉树等[^2]。这些复杂的结构往往也需要在其内部维护状态信息,因此它们的构造过程可能会更加复杂。 考虑下面这个例子,它演示了如何使用Python来构造一个基于列表实现的堆栈对象: ```python class Stack: def __init__(self): # 这是一个构造函数 self.items = [] # 初始化为空列表 def push(self, item): self.items.append(item) def pop(self): return self.items.pop() stack_instance = Stack() # 创建Stack的对象 stack_instance.push(10) print(stack_instance.pop()) # 输出最后压入的元素 ``` 在这个案例里,`__init__()` 方法扮演着构造函数的角色,负责建立新的 `Stack` 实例及其关联的存储空间。 #### 动态链接库(DLLs)上下文中对象的构造注意事项 如果讨论的是动态链接库环境下的对象构造,则需要注意额外的因素,例如依赖关系管理和权限问题。假如遇到错误消息 `"Cannot open DllXYZ.dll for writing"` ,这表明可能存在文件访问冲突或者是缺少某些运行所需的外部DLL支持等问题[^4]。解决这类情况需要确保所有必需的组件都已正确定位并且可由应用程序加载。 ### 总结 综上所述,无论在哪种具体的编程场景下,“如何构造一个对象”的答案都会围绕几个核心要素展开:一是明确目标类型的特性;二是合理设计用于启动新实体生命周期的操作序列;三是妥善处理任何可能出现的技术障碍。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值