一个简单富文本输入框控件的设计历程(一)
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了一个简单富文本输入框控件的设计历程(一)相关的知识,希望对你有一定的参考价值。
参考技术A 开发中,一提到富文本输入框,很多人会想到使用第三方的框架,比如 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 获取相关富文本信息;
(今天就写到这儿,各位是否已经知道如何做了,明天我再把具体的实现方法贴出来)
UI自动化之特殊处理三(日期控件表格富文本)
日期控件表格富文本也是一些常遇到的需要特殊处理的定位
目录
1、日期控件
2、表格
3、富文本
1、日期控件
第一种:输入框属性为:readonly="readonly"
# 去掉元素的 readonly 属性 js =‘document.getElementById("date").removeAttribute("readonly");‘ driver.execute_script(js) # 用 js 方法输入日期 js_value = ‘document.getElementById("date").value="2018-12-25"‘ driver.execute_script(js_value) 方法二:手动去除输入框中内容,然后再输入 driver.find_element_by_id("date").clear() driver.find_element_by_id("date").send_keys("2018-12-25")
第二种:无readonly输入,可直接输入
2、表格
对于表格的定位,可以使用xpath
.//*[@id=‘myTable‘]/tbody/tr[2]/td[1] 找到标签名为table的id,然后再依次用tr和td的索引取值
3、富文本
富文本的处理需要添加浏览器的配置,然后再进行定位,并输入
第一步:
#配置路径 profile_directory=r‘c:/路径‘ #加载路径 profile=webdriver.FirefoxProfile(profile_directory) #启动浏览器配置 driver=webdriver.Firefox(frofile)
driver.find_element_by_id("tinymce").send_keys(keys_TAB)
以上是关于一个简单富文本输入框控件的设计历程(一)的主要内容,如果未能解决你的问题,请参考以下文章