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

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)

 

第二步:定位到富文本框上

第三步:输入,若输入无反应,需先输入一个tab键,再输入

driver.find_element_by_id("tinymce").send_keys(keys_TAB)

  

以上是关于一个简单富文本输入框控件的设计历程(一)的主要内容,如果未能解决你的问题,请参考以下文章

C#中,怎么使用富文本框控件显示一个文件的内容

网页 使用js或jQuery实现 显示的文本变成输入框以供修改

UE4用蓝图制作可以使用富文本并且逐字显示的简单对话系统

UE4用蓝图制作可以使用富文本并且逐字显示的简单对话系统

UE4用蓝图制作可以使用富文本并且逐字显示的简单对话系统

UE4用蓝图制作可以使用富文本并且逐字显示的简单对话系统