美文网首页iOS开发iOS开发
一个简单富文本输入框控件的设计历程(一)

一个简单富文本输入框控件的设计历程(一)

作者: Zhuguojie | 来源:发表于2017-03-07 17:17 被阅读812次

  开发中,一提到富文本输入框,很多人会想到使用第三方的框架,比如 YYText。我也和大多数人一样,不想重复造轮子,但是我发现很多第三方的功能实在是太多太全了,而我只需要其中的一种而已,于是乎打算自己弄一个玩玩儿。先来看一下效果图。

  如何设计呢?富文本其实最主要思想是,把富文本和普通文本一一对应起来。比如富文本是 “undefined”,那么它的普通文本就是“标题”。那么如何把这种关系对应起来呢?


方案一:

1、用一个数组存放富文本的信息(富文本 NSRange ,普通文本中的 NSRange,富文本内容);

2、当用户输入的时候,更新数组中 NSRange 的值;

3、控制光标位置不在富文本范围以内;

4、控制选择范围的起点和终点不在富文本范围以内;

5、调整富文本显示的颜色;

6、获取富文本;

7、获取普通文本。

  如何你去实现,2、3、4、5 、6 这几个方法都需要枚举整个数组,而且在更新 NSRange 的时候也比较麻烦,这样的效率是比较低的,因此我实现到 2/3 的时候放弃了,另谋他路,结果还真的被我找到了,那就是方案二。


  方案二总结就是三个“一”。一个类,一个属性,一个方法。     

 一个类: NSMutableAttributedString。  

  一个属性:该类的 attribute 属性。

  attribute 除了支持系统已定义的外,还支持用户自定义的。因此它便可以替代我方案一中数组的作用,并维护富文本的位置信息。      

一个方法:- (void)enumerateAttributesInRange:(NSRange)enumerationRange options:(NSAttributedStringEnumerationOptions)opts usingBlock:(void (NS_NOESCAPE ^)(NSDictionary*attrs, NSRange range, BOOL *stop))block NS_AVAILABLE(10_6, 4_0);

  这个方法很特殊,主要是看我红框框中的内容,意思是,你可以在枚举的时候随意更改该 Range 内的内容,增、删、改都不会影响它的枚举位置。

方案二:

1、使用 NSMutableAttributedString 来记录富文本信息;

2、使用 NSMutableAttributedString 获取相关富文本信息;

(今天就写到这儿,各位是否已经知道如何做了,明天我再把具体的实现方法贴出来)

相关文章

网友评论

    本文标题:一个简单富文本输入框控件的设计历程(一)

    本文链接:https://www.haomeiwen.com/subject/gkymgttx.html