iOS UITextField添加分割功能

版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://blog.csdn.net/pk_sir/article/details/78341375

这是一个比较简单的功能需求,给UITextField添加了一个分割间隙,就是输入银行卡号时,每4位数一组,便于区分,使用非常简单,也非常轻量级,就一个类。话不多少,直接上代码!!!
使用方法


//1,先导入头文件
#import "UITextField+TextSeparater.h"

//2,设置间隔,3个一组,还是4个一组。。。 OK了,就这么方便
self.testTF.separatedInterval = 6;

代码如下
1,首先写一个类别,利用Runtime 添加一个属性

/**
 *  给UITextField添加了一个设置分割数的属性,
 */
- (void)setSeparatedInterval:(NSInteger)separatedInterval;
- (NSInteger)separatedInterval;

2,.m文件实现如下

注意

// 利用KVO 监听TextFeild的输入变化,但是当文字变化时,观测者没有响应,
//只用当 textField.text = @"1234" 的时候,才会响应
   [self addObserver:self forKeyPath:@"text" options:NSKeyValueObservingOptionNew context:nil];
    //这个是每当TextFeild的输入变化时,会响应
    [self addTarget:self action:@selector(valueChanged:) forControlEvents:UIControlEventAllEditingEvents];

主要功能实现如下:

-(void)valueChanged:(UITextField*)tf{
    UITextRange * editRange =  self.selectedTextRange;
    if ((tf.text != nil) && (tf.text.length>self.separatedInterval) ) {
        NSMutableAttributedString * string =[[NSMutableAttributedString alloc]initWithString:tf.text];

        for (int i = 1; i < tf.text.length; i ++) {
            if ( i %self.separatedInterval == 0) {
                [string addAttribute:NSKernAttributeName value:[NSNumber numberWithFloat:10.f] range:NSMakeRange(i-1, 1)];
            }
        }
        self.attributedText = string;
        self.selectedTextRange = editRange;
    }    
}

如有问题,欢迎讨论!!
源码在此

展开阅读全文

没有更多推荐了,返回首页