nsmutableattributedstring,nsstring stringwithformat

  nsmutableattributedstring,nsstring stringwithformat

  昨天看斯坦福2013的ios开发的公开课看到的新东西,里面的老师说非属性字符串是iOS6的新东西,不过我看文档的时候发现很多方法在3.2的时候就有了,谷歌了一下,最后在栈溢出看到答案http://堆栈溢出。com/questions/13389647/is-n attributed string-available-before-IOs-6。

  它从iOS3.2开始就有了,但是在UILabel、UIButton、UITextView等特定用户界面控件中使用它们的能力是从iOS6开始才有的。您仍然可以使用6.0的核心文本来使用它们。

  iOS6之后加入到对象中。

  首先,非属性字符串并不是字符串。

  在非属性字符串中,有很多字典,每个都是一个属性,非属性字符串的作用,就是设置文字的效果(颜色、字体、下划线等等),以前可以使用图文混排来达到同样的效果,不过根据课程老师的描述,非属性字符串效率非常快。关于核心文本,以后再介绍下。

  当然,非属性字符串还是有点像对象的,就是他们的内容一旦设定就不可以改变,所以也就有NSMutableAttributedString。

  下面是讲稿中的一页,可以看出在非属性字符串中放的是什么

  下面直接进入演示,更容易理解

  界面的用户界面是这样的

  这个项目的目的就是使用这些按钮来改变中间那段话中的被选中的文字的相关属性。

  首先,因为要使用非属性字符串所以中间这个标签的文字属性需要更改,如下图所示,文本要选择把……归因于

  为了更直观,所以项目中并不是要把文字颜色或者是字体应用到这段文字中,只是应用到某个单词。

  这里使用微调器来选择打次,设定器可以设置每次的步长(默认是1)。

  所以使用跳舞者来每次往后往前选择一个单词,为了做到这点,首先就要把标签中的这句话分成一个个的单词

  使用下面这个方法,可以很容易的将他们分出来

  - (NSArray *)单词表

  NSArray *单词表=[[self。标签。属性化文本字符串]由字符分隔的组件插入:[ns characters et white space and newline characters et]];

  如果([单词列表计数]) {

  返回单词表;

  }否则{

  return @[@ ];

  为方便分别添加各种属性,所以写了下面两个方法以供调用

  if(range.location!=NSNotFound) {

  NSMutableAttributedString * mat=[self。标签。attributedtext可变副本];

  [mat addAttributes:属性范围:范围];

  自我。标签。属性化文本=mat

  -(void)addSelectedWordAttributes:(ns字典*)属性

  ns range range=[[self。标签。属性化文本字符串]字符串范围:self。选定的单词标签。text];

  [self addLabelAttributes:attributes range:range];

  从上面的代码可以看到,每次想像操作线一样操作属性字符串的时候,需要先调用线方法,然后就可以调用对象的各种方法啦。

  因为标签是非属性字符串,所以内容是不可以改变的,要往里面添加东西,就得先做个可变副本,然后再在复制的里面进行添加,添加好后让原来的属性字符串指向这个复制就好的了

  剩下的操作就是添加各个属性而已直接上源码咯

  //

  //ViewController.m

  //AttributedStringDemo

  //13-4-5由凯_冲刺创建。

  //版权所有2013年年cn.edu.scnu版权所有。

  #导入ViewController.h

  @interface ViewController()

  @property(弱,非原子)IBOutlet UILabel *标签

  @property(弱,非原子)IB outlet ui stepper * selectedWordStepper;

  @property(弱,非原子)IBOutlet ui标签*选中的单词标签;

  @实现视图控制器

  -(void)addLabelAttributes:(ns字典*)属性范围:(NSRange)范围

  if(range.location!=NSNotFound) {

  NSMutableAttributedString * mat=[self。标签。attributedtext可变副本];

  [mat addAttributes:属性范围:范围];

  自我。标签。属性化文本=mat

  -(void)addSelectedWordAttributes:(ns字典*)属性

  ns range range=[[self。标签。属性化文本字符串]字符串范围:self。选定的单词标签。text];

  [self addLabelAttributes:attributes range:range];

  -(一行动)下划线

  [self addSelectedWordAttributes:@ { NSUnderlineStyleAttributeName:@(NSUnderlineStyleSingle)}];

  -(一行动)取消下划线

  [self addSelectedWordAttributes:@ { NSUnderlineStyleAttributeName:@(NSUnderlineStyleNone)}];

  -(I action)changeSelectedWordColor:(ui按钮*)发件人{

  [self addselectedword属性:@ { NSForegroundColorAttributeName:sender。背景色}];

  -(I操作)更改字体:(ui按钮*)发件人{

  ns字典* attributes=[self。标签。属性化文本属性索引:0有效范围:NULL];

  CG float字体大小=[ui字体系统字体大小];

  ui font * existing font=attributes[nsfont attributename];

  if(现有字体)字体大小=现有字体。点数;

  ui font * font=[发件人。标题标签。字体font with size:font size];

  [self addSelectedWordAttributes:@ { nsfont attributename:font }];

  -(一行动)大纲{

  [self addselected word attributes:@ { nsstrokewithattributename:@ 5 }];

  -(I行动)联合国纲要{

  [self addselectedword属性:@ { nsstrokewithattributename:@ 0 }];

  NSArray *单词表=[[self。标签。属性化文本字符串]由字符分隔的组件插入:[ns characters et white space and newline characters et]];

  如果([单词列表计数]) {

  返回单词表;

  }否则{

  return @[@ ];

  - (NSString *)选定的单词

  返回[self单词表][(int)self。selectedwordstepper。值];

  -(I操作)更新选定的单词{

  自我。selectedwordstepper。最大值=[[自身词表]计数]-1;

  自我。选定的单词标签。text=[自选词];

  - (void)viewDidLoad

  【超级viewDidLoad】;

  //在加载视图之后进行任何额外的设置,通常是从笔尖.

  [自我更新选定的单词];

  来个效果图

郑重声明:本文由网友发布,不代表盛行IT的观点,版权归原作者所有,仅为传播更多信息之目的,如有侵权请联系,我们将第一时间修改或删除,多谢。

留言与评论(共有 条评论)
   
验证码: