Swift 实现修改光标位置(任意或指定)

  • 看效果


    UITextField.gif
  • 原理:主要就是原生方法调用,较简单。也就是指定selectedTextRange

  • 上代码:创建一个UITextField的扩展UITextField+Extension.swift

//
//  UITextField+Extension.swift
//

import UIKit

extension UITextField {
    
    func selectedRange() -> NSRange {
        
        let beginning = self.beginningOfDocument
        let selectedRange = self.selectedTextRange
        let selectionStart = selectedRange!.start
        let selectionEnd = selectedRange!.end
        
        let location: NSInteger = self.offset(from: beginning, to: selectionStart)
        let length: NSInteger = self.offset(from: selectionStart, to: selectionEnd)
        
        return NSRange.init(location: location, length: length)
    }
    
    func setSelectedRange(range: NSRange) {
        let beginning = self.beginningOfDocument
        
        let startPosition = self.position(from: beginning, offset: range.location)!
        let endPosition = self.position(from: beginning, offset: range.location + range.length)!

        let selectionRange = self.textRange(from: startPosition, to: endPosition)
        self.selectedTextRange = selectionRange
    }
}

  • 使用
    func textField(_ textField: UITextField, shouldChangeCharactersIn range: NSRange, replacementString string: String) -> Bool {
        DispatchQueue.main.asyncAfter(deadline: .now()+0.5) {
            if textField.text!.count > 0 && !(textField.text!.contains(" cm")) {
                if textField == self.dadHTextField {
                    let range = self.dadHTextField.selectedRange()
                    self.dadHTextField.text!.append(" cm")
                    self.dadHTextField.setSelectedRange(range: range)
                } else {
                    self.motherHTextField.text!.append(" cm")
                }
            }
        }
        return true
    }
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • 1、通过CocoaPods安装项目名称项目信息 AFNetworking网络请求组件 FMDB本地数据库组件 SD...
    阳明AI阅读 16,040评论 3 119
  • 喜报! 祝贺炫付获得口碑网年度最佳合作伙伴!祝贺汤总! 喜报! 农业不易,从零到一,悦农庄三年实践,模式初具。热烈...
    咸叔说阅读 1,872评论 5 1
  • 健身教练作为一份新兴职业,由于其工作性质的阳光性,还有很高的薪资,也吸引了很多人的目光,健身教练这个工作也出现在我...
    健身狂人阅读 1,495评论 0 0
  • 文|郑萌伟 2017年7月7日19时35分,天津权健主场迎战广州富力。上半场第25分钟由权健的孙可打破僵局,半场临...
    郑萌伟足球观察阅读 1,066评论 0 1
  • 利用周末下午的时间读完了采铜的《精进:如何成为一个很厉害的人》,作者在书中提出了一种更有效的提升自我的方法:用持续...
    静心和尚阅读 4,367评论 0 2