UITextField加上单元符号等小尾巴

有一个缺点,可以移动光标在尾巴后,如何禁止请指教。

@interface UITextField (Add)

@property (nonatomic, copy) NSString* unitStr;

@end

#import "UITextField+Add.h"
#import <objc/runtime.h>

@implementation UITextField (Add)

-(NSString *)unitStr{
    
    return objc_getAssociatedObject(self, _cmd);
}


-(void)setUnitStr:(NSString *)unitStr{
    
    objc_setAssociatedObject(self, @selector(unitStr), unitStr, OBJC_ASSOCIATION_COPY_NONATOMIC);
    
    if (unitStr.length > 0) {
        [self addTarget:self action:@selector(_unitChange:) forControlEvents:UIControlEventEditingChanged];
        [self addTarget:self action:@selector(_adjustCursor) forControlEvents:UIControlEventEditingDidBegin];
    }else{
        [self removeTarget:self action:@selector(_unitChange:) forControlEvents:UIControlEventEditingChanged];
        [self removeTarget:self action:@selector(_adjustCursor) forControlEvents:UIControlEventEditingDidBegin];
    }
}

#define PreHasValue  1
#define PreNotHasValue 0

-(void)_unitChange:(UITextField *)textfield{
    
    NSString *unitStr = [textfield.unitStr copy];
    
    NSInteger isHasValue = PreNotHasValue;
    NSString* realText = nil;
    BOOL  needAdjustCursor = false;
    
    do {
        NSString* text = textfield.text;
        
        if (text.length == 0 || [text isEqualToString:unitStr]) {
            break;
        }
        
        if (![text containsString:unitStr] && textfield.tag == PreHasValue) {//从最后开始删除
            
            text = [text substringToIndex:text.length-1];
            if (text.length == 0) { //数字已经删完
                break;
            }
        }
        
        text = [text stringByReplacingOccurrencesOfString:unitStr withString:@""];
        text = [text stringByAppendingString:unitStr];
        
        needAdjustCursor = ![text isEqualToString:textfield.text]; //内容改变,光标位置j就需要调整
        isHasValue = PreHasValue;
        realText = text;
        
    } while (0);
    
    textfield.tag  = isHasValue;
    
    //不相等才执行, 设置值会改变光标位置
    if (![textfield.text isEqualToString:realText]) {
        textfield.text = realText;
    }
    
    if (needAdjustCursor) {
        //处理光标
        [self _adjustCursor];
    }

}

- (void)_adjustCursor
{
    NSString *unitStr = [self.unitStr copy];

    //处理光标
    UITextPosition *selectedPosition = self.endOfDocument;
    selectedPosition = [self positionFromPosition:selectedPosition offset:-unitStr.length];
    
    self.selectedTextRange = [self textRangeFromPosition:selectedPosition toPosition:selectedPosition];
}

@end
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • 好想吃个西瓜, 可是想起你, 切不下去!
    简村小吹阅读 121评论 0 2
  • 驱车颠簸路盘旋,红轮西坠青山掩。 夜色降临苍茫暮,幽幽几家灯火燃。
    老槐树阅读 287评论 0 3
  • 突然发现一件特别不科学的事,我这么自私这么爱自己的人,为什么会喜欢你?一个朋友问过我一句话让我语塞:他为你做过什么...
    太阳爱看书阅读 227评论 0 0