UItextInput是一个protocol,一般来说,文字处理的控件都要遵守这个协议。如UITextField,UITextView。下面介绍一些文字处理的基本概念。

  1. marked text
    对于多步骤(multistage)的文字输入来说,有一些文字是已经输入在文本框里,却还没有点击确认,这些文字叫做marked text。中文有,日文也比较常见。
  2. UITextPositionUITextRange

    遵守UITextInput协议的类都要创建这两个类的子类。为什么不用NSRangeNSInteger呢。用来表示文字的位置和范围。

    如何转化NSRangeNSInteger?

    • UITextPosition to nsinteger
    func offset(from: UITextPosition, to toPosition: UITextPosition) -> Int
    • UITextPosition to UITextRange
    func textRange(from fromPosition: UITextPosition, to toPosition: UITextPosition) -> UITextRange?
    • nsinteger to UITextPosition
    NSInteger startOffset = [tv offsetFromPosition:tv.beginningOfDocument toPosition:start];
  3. 坐标位置和UITextRange的转换

    • func characterRange(at point: CGPoint) -> UITextRange?
      根据坐标系中点的位置,返回一个包含了点所处的character的UITextRange。为啥不是一个UITextPosition,因为一个character会占据多个字符宽度,如emoji表情。
      如果那个位置没有文字,返回nil。
    • func closestPosition(to point: CGPoint) -> UITextPosition?
      根据点来找到距离这个点最近的而一个UITextPosition。如果这个点在第二行行位,而第二行只有一个字,可能定位到上面一行的最末。。

最新文章

  1. 装个centos虚拟机之设置桥接网络
  2. 【leetcode❤python】198. House Robber
  3. 系统集成之用户统一登录( LDAP + wso2 Identity Server)
  4. VMware系统运维(六)VMware vSphere Web Client安装
  5. Windows Media Player安装了却不能播放网页上的视频
  6. docker私有仓库
  7. EventBus 事件总线 原理
  8. 通过 sp_configure 进行 Database Mail 配置
  9. docker学习笔记1:docke环境的查看
  10. Android 记录的(MediaRecorder)而播放(MediaPlayer)
  11. AWK----awk与shell交互
  12. 关于adb is down 的两个解决方案
  13. 如何禁止chrome浏览器http自动转成https 【转】
  14. RSA算法加解密
  15. js/php判断移动端还是PC端
  16. 用寄快递模拟数据在网络中的传送过程,发送一个ip数据报到接受这个ip数据报经历的过程
  17. Vue.js 子组件的异步加载及其生命周期控制
  18. day8.python文件操作
  19. Python 练习:简单的购物车
  20. [转] 通过jQuery Ajax使用FormData对象上传文件

热门文章

  1. 《Android Studio实用指南》7.1 AndroidStudio代码检查工具概述
  2. 无法修改SQL Server 服务名称
  3. 对称二叉树 · symmetric binary tree
  4. ServiceStack.Redis泛型存储后getById问题
  5. [c++] final override keyword
  6. [SoapUI] 按照 Test Step Type 获取所有满足条件的 Test Step
  7. SSL与TLS有什么区别
  8. 实践作业3:白盒测试----第三次小组会DAY8
  9. Python - excel 详解
  10. [GO]结构体的比较和赋值