FKRestrictInput
对 UITextField 和 UITextView 进行输入限制,支持限制大小写字母、数字、特殊符号等,支持长度限制和强制大小写转换。
基本使用
- restrictType
进行限制输入的枚举,默认 RestrictTypeNone,可多选,其中枚举 RestrictTypeOther 需要和 otherRestrictString 属性配合使用。目前包含:RestrictTypeNone
、RestrictTypeUpperLetter
、RestrictTypeLowerLetter
、RestrictTypeDigital
、RestrictTypeEnglishSymbol
、RestrictTypeWhitespace
、RestrictTypeNewLine
、RestrictTypeControl
、RestrictTypeOther
。
使用示例
FKRestrictTextField *textView = [[FKRestrictTextField alloc] init];
textField.restrictType = RestrictTypeNone;
FKRestrictTextView *textView = [[FKRestrictTextView alloc] init];
textView.restrictType = RestrictTypeUpperLetter | RestrictTypeLowerLetter | RestrictTypeDigital;
-
maxLength
进行长度限制,默认 UINTMAX_MAX。在过滤允许范围外字符也会根据此值来提前结束,以提高性能。 -
otherRestrictString
在使用 RestrictTypeOther 枚举时才会处理,用来处理枚举之外的限制字符。注意,最好不要填写已设置枚举中的字符,否则会发生预料之外的结果。 -
forceCaseConversion
进行强制大小写转换,只在大写限制或小写限制只存在一个时生效,即 restrictType 属性包含 RestrictTypeUpperLetter 或 RestrictTypeLowerLetter 其中之一,其他枚举无影响。 -
strictMode
严格模式,默认否,这种情况下,对于允许外字符会进行过滤,只留下允许范围内的字符。而在严格模式下,粘贴等操作不进行字符过滤,只要其中包含限制以外的字符就忽略输入。注意,因为本模式会严格遍历所有字符,所以一次性粘贴超大量文本可能会造成卡顿。
效果展示
细节处理
-
关于再次设置代理
目前已处理了代理被覆盖的问题,可以在响应用户再次赋值的 delegate,限制功能也不会受影响。唯一受到的意外是在打印 FKRestrictTextField 或 FKRestrictTextView 的 delegate 时是自己本身,而不是再次赋值的值。 -
关于中文等 marked 模式的输入
UITextField 在输入 marked 模式的字符时,第一个字符不会被识别为 marked,只有当 target 的 UIControlEventEditingChanged 中才会正常处理。FKRestrictInput 已做好相关处理,限制字符和限制长度都会忽略 marked,包括但不限于中文简体、中文繁体、日文片假名、日文平假名等输入法。 -
关于粘贴、剪切等
FKRestrictInput 已经进行了相关处理,考虑到剪切、删除操作没有输入任何字符,所以会忽略限制。而粘贴,则会根据是否处于严格模式来处理。在非严格模式下,粘贴大量文本会根据 maxLength 立即结束,从而提高性能。但在最坏的情况下,即需要留下的字符过于偏后,同样可能造成卡顿。