构造和显示具有样式的Text

1.问题:

你希望能够在UI 组建中直接能够显示富文本,而不是针对每一种格式创建一个单独的UI组件。例如,你想要在一个UILabel 中显示一个句子,该句子中只有一个单词是粗体。

2.富文本是很好的东西!许多程序员需要在UI 组建中的一行文本内显示各种样式的字符串。

构造属性字符串的最好方法就是使用NSMutableAttributedString 类的initWithString:方法,同时传递一个NSString 到这个方法中。这将会创建一个没有任何属性的属性字符串。然后,通过NSMutableAttributedString 类的 setAttributes:range:方法来给字符串中的不同部分设置属性。这个方法有两个参数:

    setAttributes      (attribute  属性)

     是一个字典,字典左右的key 都是字符属性,每个key 的值依赖于key 本身。下面是字典中可以设置的一些重要key:

    NSFontAttributeName:这个key 的值是UIFont 的一个实例,用来定义指定字符串范围的字体。

    NSForegroundColorAttributeName:这个key 的值是UIColor 类型,用来定义指定字符串范围的颜色。

    NSBackgroundColorAttributeName:这个key 的值是UIColor 类型,用来定义指定字符串范围的背景颜色。

    NSShadowAttributeName:这个key 的值必须是NSShadow 的一个实例,用来定义指定字符串范围的阴影。

   range
    是NSRange 类型,用来指定属性应用在字符串的起点和长度。

(注意:要想查看上面这个方法可以传递的所有不同key,可以浏览苹果在线文档关于NSMutableAttributedstring 类介绍。)

3.例子:

“iOS”属性字典可以通过下面的代码来构造:

NSDictionary *attributesForFirstWord = @{
NSFontAttributeName : [UIFont boldSystemFontOfSize:60.0f],
NSForegroundColorAttributeName : [UIColor redColor],
NSBackgroundColorAttributeName : [UIColor blackColor]
};

“SDK”则使用下面的属性:

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
};

通过下面的代码,不仅创建了label,还设置好了文本属性:

- (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];
}
时间: 2024-10-09 10:54:11

构造和显示具有样式的Text的相关文章

1.鼠标点击换样式+2.下拉菜单缓慢显示/隐藏样式效果

1.鼠标点击换样式 <style type="text/css"> .aa{ width:90px; height:60px;text-align:center; vertical-align:middle; line-height:60px; margin-right:10px; font-size:19px; float:left; background-color:#06F} </style> <body> <div style=&quo

【j2ee spring】42、巴巴运动网显示产品样式

巴巴运动网显示产品样式 项目结构 项目代码 底层接口: /** * 功能:这个是品牌样式的接口 * 文件:ProductStyleService.java * 时间:2015年5月31日19:33:19 * 作者:cutter_point */ package com.cutter_point.service.product; import com.cutter_point.service.base.DAO; public interface ProductStyleService extend

IIS发布,无法显示CSS样式和图片

在BS的项目中,完成之后,都需要发布自己的网站.这个时候就要安装IIS了. 我也是最近才打算使用IIS来进行发布的.刚把IIS安装上,就遇到了问题. 出现问题就想办法解决问题呗.遇到的问题和视频里面的类似,他也讲了一下是如何解决的.不过,他的只是不显示图片.而我的是 图片和CSS样式都显示.错误的原因:路径与发布不一致. 检查了一下自己的代码,路径写错?这也不至于全写错吧. 打开自己发布前的vs程序,执行一下:没问题.如果是路径错了,在vs程序中检查,也应该不显示才对? 既然程序没问题,发布也没

ListView显示不同样式的item

先look图 我们再使用listview时,listview的item大多时候都是一种样式,在很多app中也很常见,但有时候根据需求,可能数据的数量不一样,同个类型的数据显示的位置不同,亦或者有的item需要图片,有的不需要,但是这些又必须在同一个listview中显示,这时我们就需要在listview中显示多种样式的item,首先我们需要考虑的是如何将不同数量的数据装载到ArrayList<~>中呢,先看看下面的listViewItem,. 1 package com.example.ker

Android Studio显示主题/样式设置

估计很多刚开始用Android Studio的DEV,都有经常看到网上关于Android Studio的贴图是灰色样式的,但是为啥自己刚安装的就是白色样式的呢. 这个其实只要改下显示主题就可以了. 如下图,选择Darcula就可以了,IntelliJ是默认风格,Windows这个风格其实颜色和IntelliJ是差不多的: Android Studio显示主题/样式设置,布布扣,bubuko.com

代码控制EditText是否显示密码样式

有时候我们会碰到这样的需求,在输入框里输入密码时,要求在EditText里的文本可以在密码样式与非密码样式(正常文本)之间进行切换. 1.在xml文件里设置成密码样式 android:inputType="textPassword" 2.在代码里设置显示密码样式与正常文本样式 设置显示密码样式: mEditTextPwd.setInputType(InputType.TYPE_CLASS_TEXT | InputType.TYPE_TEXT_VARIATION_PASSWORD); 设

Android项目实战(十四):TextView显示html样式的文字

原文:Android项目实战(十四):TextView显示html样式的文字 项目需求: TextView显示一段文字,格式为:白雪公主(姓名,字数不确定)向您发来了2(消息个数,不确定)条消息 这段文字中名字和数字的长度是不确定的,还要求名字和数字各自有各自的颜色. 一开始我想的是用(转) SpannableString与SpannableStringBuilder来实现,因为它可以实现一段文字显示不同的颜色 但是貌似它只能固定哪些位置的文字显示什么样式,于是乎放弃. 然后就想到了用 Html

使用freemarker模板引擎,后台返回的时间格式(datetime类型)无法显示在input type=&quot;text&quot;中显示

详情: 在使用freemarker是,在后台查出user,其中有入职时间entryDate(date类型),当我想要将 entryDate 显示在 <input type="text" value="${user.entryDate}"/>时,出现错误,无法显示 显示页面: 原因: 因为freemarker无法确定用那种格式来显示这个时间 解决办法: 在 <input type="text" value="${user

XE7 &amp; FMX 那些年我们一起上过的控件:ListView 之 (3) 加载数据时如何显示自定义样式

本文介绍一下ListView下如何加载数据.及使用进度条反馈当前进度给用户. 注意: 原创作品,请尊重作者劳动成果,转载请注明出处!!!原文永久固定地址:http://www.cnblogs.com/weii/p/4190719.html 我们先来看看效果图: FMX异常强大,我们可以发挥想像,自定义进度样式,以下为本文参考代码: procedure TForm1.Button3Click(Sender: TObject); var pe: TPie; //扇形作进度 rc: TRoundRec