Skip to content

Latest commit

 

History

History
104 lines (81 loc) · 4.62 KB

README.md

File metadata and controls

104 lines (81 loc) · 4.62 KB

SimpleInput

  在平时开发中,经常会对输入控件(UITextFieldUITextView)做一些处理,比如设置占位符,设置允许输入的最大长度,设置只能输入数字等等。这些功能谈不上多复杂,你可能也做过一些简单的封装,不过你可能仅仅只是针对某些情况做的封装,不够全面。
  我在开发中就是这个样子的,每次遇到类似功能都要去写很多重复代码。之前也曾想过写个轮子,把对输入控件的处理封装起来,但是由于需求千变万化,且功能不复杂,网上有很多类似代码,也就懒得写了。但是总这样下去也不行啊,所以自己动手,写了这个轮子。
  该轮子使用方法非常简单,相信你看一眼就会。
  特别说明下,该轮子不支持OC,只支持Swift。如果你想在OC项目中使用,你需要写个Swift文件桥接,间接的使用该轮子。

主要功能

  • 支持UITextFieldUITextView这两大输入控件的输入处理。理论上也支持其他的输入控件,比如YYTextView,但是要支持YYTextView的话,需要导入三方库,我们用到YYTextView的时候很少并且我想让该轮子不依赖任何三方,所以如果你的项目用的是YYTextView,请自行想办法了😄
  • 支持设置占位符文字、占位符文本颜色、占位符文本字体、属性占位符
  • 支持设置最大长度
  • 支持中文、表情、数字、小写字母、大写字母的多种组合限制
  • 支持正则表达式对输入做限制
  • 支持浮点类型(支持形如+1.23-0.25这种带有符号的浮点形式)
  • 支持实时文本回调

安装

推荐使用CocoaPods

pod 'SimpleInput-Swift'

使用

设置占位符

针对UITextField来说,系统已经自带placeholder属性,但是不能自定义placeholder的颜色和字体,除非设置attributedPlaceholder

let textField = UITextField()
textField.placeholders.text = "请输入文本" // 系统原有的placeholder属性将失效
textField.placeholders.color = UIColor.cyan
textField.placeholders.font = UIFont.systemFont(ofSize: 30)

针对UITextView来说,系统没有提供placeholder属性。

let textView = UITextView()
textView.placeholders.text = "请输入文本"
textView.placeholders.color = UIColor.brown.withAlphaComponent(0.3)

输入限制

支持UITextFieldUITextView,下面以UITextField为例,UITextView使用和UITextField相同

如果你想设置最大长度

textField.limitedInput.maxLength = 10 // 设置为0,表示无限长度,默认为0

如果你想设置为只能输入中文,可以设置generalPolicy属性

textField.limitedInput.generalPolicy = .chinese

如果你想输入金额或者浮点类型,可以设置decimalPolicy属性

limitedInput.decimalPolicy = .policy1(integerPartLength: 5, decimalPartLength: 8, allowSigned: true)

如果你觉得框架自带的输入限制满足不了你的需求,你可以自定义正则

textField.limitedInput.regex = "^1[a-zA-Z]*" // 以1开头,后面只能输入字母

实时输入回调

// 实时文本回调有3种
// processChangeClosure: 原始文本实时回调
// processRealChangeClosure: 真实文本回调(对decimalPolicy做了处理)
// processRealDecimalChangeClosure: 真实小数策略文本回调(对decimalPolicy做了处理)
textField.limitedInput.processChangeClosure { text in
    print("原始文本:\(text ?? "")")
}

针对实时文本回调做下说明:

  • processChangeClosure

原始文本实时回调。也就是说,返回的是输入控件的值

  • processRealChangeClosure

真实文本回调 对decimalPolicy做了处理,如果decimalPolicy为空,返回的是输入控件的值 比如0.120 => 0.12,把尾部的0去掉了 比如5. => 5,把尾部的小数点去掉了 比如+ => nil,只输入一个+,返回的其实是nil 也就是说,返回的是合法的且是最精简的数

  • processRealDecimalChangeClosure

processRealChangeClosure的基础上做了进一步处理 比如decimalPolicy设置为.policy1(integerPartLength: 2, decimalPartLength: 3, allowSigned: false),输入控件此时值为2.3,那么此时返回的是2.300


更多使用方法请查看`Demo`和源码注释

补充

  我是想把该轮子写的非常完善,不过由于本人才疏学浅,还需要各位大神多多指教。在使用过程中,有任何建议或问题,欢迎提issue,或者通过邮箱1035841713@qq.com联系我。
  喜欢就star❤️一下吧