textField中输入身份证号,手机号,银行卡号时每隔几位需要添加空格。当输入错误时需要从末尾或者中间删除,删除之后还要保持当前textfield的中内容保持每隔几位就有一个空格的格式。这个分类主要是为了解决这个问题
Branch: master
Clone or download
Fetching latest commit…
Cannot retrieve the latest commit at this time.
Permalink
Type Name Latest commit message Commit time
Failed to load latest commit information.
textField misc Jan 14, 2018
README.md readme修改 Sep 11, 2018
textField.gif

README.md

TextField + NumberFormat

TextField中输入身份证号,手机号,银行卡号时每隔几位需要添加空格。当输入错误时需要从末尾或者中间删除,删除之后还要保持当前textfield的中内容保持每隔几位就有一个空格的格式。这个分类主要是为了解决这个问题

(补2018年09月11日)使用条件

  • 目前还不支持动态的改变格式。�即在输入之前是@[@2,@5],输入几个数字之后改变为@[@3,@6]
  • 不支持粘贴。当初在设计这个分类的时候,考虑到这种格式化的场景不太适合粘贴。因为粘贴的话不能保证用户粘贴过来的就是数字,可能是其他乱码,需要对粘贴过来的内容做过滤。当时嫌太麻烦也没太大必要就没做。不知道使用的小伙伴这种需求大不大,如果这种场景的使用比较多的话,最近比较忙,后期补上这种场景的处理

API介绍

textField中输入的空格格式化
 @param textField  
 @param range  
 @param string  
 @param blankLocation 要加的空格的位置 比如手机号11 位 如果需要 344的显示格式 空格位置就是 @[@4,@9]
                      身份证号最大 18位 684格式 空格位置 位@[@6,@15]
                      银行卡号最大 24 空格位置 @[@4,@9,@14,@19,@24] 不同的账号显示格式可以自定义
 @param limitCount 限制的长度 超过此限制长度 则不能输入 如果输入的为0 则不限制输入的长度
 @return textField中输入的身份证号 ,手机号,银行卡号 有需要在中间加入空格的需求 此扩展就是为了解决这类问题的
 
 */
+ (BOOL)inputTextField:(UITextField *)textField shouldChangeCharactersInRange:(NSRange)range
     replacementString:(NSString *)string
        blankLocations:(NSArray <NSNumber *>*)blankLocation
            limitCount:(NSInteger )limitCount;
            

使用方法

  • 只需一行代码

- (BOOL)textField:(UITextField *)textField shouldChangeCharactersInRange:(NSRange)range replacementString:(NSString *)string {
    // 在textField的代理方法中调用这一句方法
    // 设置好要展示的格式 即 空格的位置blankLocations 
    // 如果limitCount 为0 表示不显示输入的长度大小
    return [UITextField inputTextField:textField
         shouldChangeCharactersInRange:range
                     replacementString:string
                        blankLocations:@[@4,@9,@14,@19,@24]
                            limitCount:24];
    
}


原理讲解

具体实现原理在这 我是 blog 点我

效果图

image