自定义UItextFiled,限制TextFiled 的输入长度

1、一般情况下,处理textFiled的字符数都会用到textField的代理方法

- (BOOL)textField:(UITextField *)textField shouldChangeCharactersInRange:(NSRange)range replacementString:(NSString *)string;

在方法中对字符数进行控制,但是此方法的有一定的问题。现在推出一种新的自定义的机制,自定义textField控件,为其增加一个控制输入长度的属性,如下

.h文件

#import <UIKit/UIKit.h>

@interface PKTextField : UITextField

@property (nonatomic,assign)NSInteger allowInputLength;

@end

.m 文件

#import "PKTextField.h"

@implementation PKTextField

- (instancetype)init{
    self = [super init];
    if (self) {
        self.allowInputLength = CGFLOAT_MAX;
        [self addTarget:self action:@selector(textFieldEditChanged) forControlEvents:UIControlEventEditingChanged];
    }
    return self;
}

- (instancetype)initWithFrame:(CGRect)frame{
    self = [super initWithFrame:frame];
    self.allowInputLength = CGFLOAT_MAX;
    [self addTarget:self action:@selector(textFieldEditChanged) forControlEvents:UIControlEventEditingChanged];
    return self;
}

-(void)layoutSubviews{
    [super layoutSubviews];
    self.clipsToBounds = YES;
    self.backgroundColor = [UIColor whiteColor];
    self.layer.cornerRadius = 2.5;
    self.layer.borderWidth = 0.5;
    self.borderStyle = UITextBorderStyleNone;
}

-(void)setEnabled:(BOOL)enabled{
    [super setEnabled:enabled];

    if (enabled == YES) {
        self.layer.borderColor = [UIColor colorFromHexRGB:@"999999" alpha:1.0].CGColor;

        CGRect frame = self.frame;
        frame.size.width = 5.0;
        UIView *leftview = [[UIView alloc] initWithFrame:frame];
        self.leftViewMode = UITextFieldViewModeAlways;
        self.leftView = leftview;

        CGRect rightFrame = CGRectMake(0,0,5, self.bounds.size.height);
        UIView * rightView = [[UIView alloc] initWithFrame:rightFrame];
        self.rightViewMode = UITextFieldViewModeAlways;
        self.rightView = rightView;

    }else{
        self.layer.borderColor = [UIColor clearColor].CGColor;
        self.leftView = nil;
        self.rightView = nil;
    }
}

-(void)textFieldEditChanged
{
    UITextField *textField = self;
    NSString *toBeString = textField.text;

    //获取高亮部分
    UITextRange *selectedRange = [textField markedTextRange];
    UITextPosition *position = [textField positionFromPosition:selectedRange.start offset:0];

    // 没有高亮选择的字,则对已输入的文字进行字数统计和限制
    if (!position)
    {
        if (toBeString.length > self.allowInputLength)
        {
            NSRange rangeIndex = [toBeString rangeOfComposedCharacterSequenceAtIndex:self.allowInputLength];
            if (rangeIndex.length == 1)
            {
                textField.text = [toBeString substringToIndex:self.allowInputLength];
            }
            else
            {
                NSRange rangeRange = [toBeString rangeOfComposedCharacterSequencesForRange:NSMakeRange(0, self.allowInputLength)];
                textField.text = [toBeString substringWithRange:rangeRange];
            }
        }
    }
}

@end

使用示例:

PKTextField * titleTF = [[PKTextField alloc] initWithFrame:CGRectMake(leftPadding, 17, ScreenWidth - leftPadding - BtnHotWidth, 30)]; titleTF.textColor = [UIColor blackColor]; titleTF.enabled = NO; titleTF.text = @""; titleTF.font = [UIFont systemFontOfSize:23.0]; titleTF.allowInputLength = 10;
时间: 2024-12-25 05:06:01

自定义UItextFiled,限制TextFiled 的输入长度的相关文章

iOS--判断字符串为null 与如何限制textFiled的输入长度

1.大家在判断字符串是否为null时,肯定第一时间就写出string != nil 奇怪的时,传过来的null值始终通过了验证. 查了一些资料,发现如果你时远程调用服务类,得到null值需要这样去判断 if([string isKindOfClass:[NSNull class]]){   } 2.在使用textFiled控件输入一些东西的时候 经常会限制一些输入字符的长度我们可以用如下方法 - (BOOL)textField:(UITextField *)textField shouldCha

fscanf_s在读入string时必须同时输入长度

fscanf_s在读入string时必须同时输入长度,比如: char buf[100]; fscanf_s(file,"%s",buf,100);//这里如果缺少100这个长度的话,会出现运行时错误!

代码设置Android EditText的输入长度maxLength

在今天开发中遇到一个自己写的自定义控件,因为考虑到复用,在每个需求下的edittext的输入长度不一样,在xml文件里面设置是不能实现这个需求的,于是在发现了这个API,可以通过代码设置! 希望对大家有所帮助! public void setEtCoustomLength(int length){ if (length>0) { etCoustom.setFilters(new InputFilter[]{new InputFilter.LengthFilter(length)}); } } 重

限制 UITextField 输入长度

限制 UITextField 输入长度 标签(空格分隔): UITextField UITextField 是 iOS 中最常用的组件之一.关于它也有各种各样的需求,这些需求是它本身没有提供相应的API的.限制输入框文本长度是常见的需求,UITextField 本身也并没有为此提供API.本文尝试给其加入这个功能. 1.通过 delegate 来实现 限制 UITextField 的输入字数,首先想到的是 UITextFieldDelegate,通过实现这个协议来实现需求: - (BOOL)te

在EditText中限制输入,自定义样式,监听输入的字符,自动换行

自动获取焦点 <!-- 添加:<requestFocus /> 会自动获取焦点 --> <EditText android:layout_width="match_parent" android:layout_height="wrap_content" android:ems="10" android:gravity="center_horizontal" android:hint="自

android的edittext输入长度

http://blog.csdn.net/uyu2yiyi/article/details/6329738 http://flysnow.iteye.com/blog/828415/ http://songfantasy.iteye.com/blog/1172362 android的edittext输入长度,布布扣,bubuko.com

自定义Edit控件控制输入范围

1 //自定义Edit,实现十六进制输入控制,使用OnChar()函数实现 2 //MyEdit.h 3 #pragma once 4 5 class CMyEdit : public CEdit { 6 DECLARE_DYNAMIC(CMyEdit) -----------------------① 7 8 public: 9 CMyEdit(){}; 10 protected: 11 DECLARE_MESSAGE_MAP() ----------------------------② 1

简单几步实现 IOS UITextField输入长度的控制

在ios开发过程中,我们有时候需要对UITextField的输入长度进行控制,比如输入手机号码最大长度为11位等,而ios自身又不像android那样可以设置输入框的输入长度,接下来通过简单几步实现这个功能: 1.新建一个类继续UITextField比如这个类叫MyUITextField 2.声明一个变量用来记录输入的最大长度 3.添加一个事件用于监听输入框输入值的变化 4.通过判断当前text字符串的长度是否大于最大长度来截取字符串并赋值給当前text保证text字符串的值始为指指定的最大长度

iOS 中文输入长度控制

当使用拼音输入法时,该委托方法中的最后一个参数string接受的是输入的字母,而不是选择的汉字,造成的结果是,当想输入文字“我在编程”,输入拼音“wozaibiancheng”,每输入一个字母便会进入委托方法,统计的字符长度是字母的长度,实际上汉字还未超过限制长度,但是字母的长度超过了导致无法继续输入. 中文控制输入长度的方法如下: 1.注册notification [[NSNotificationCenter defaultCenter]addObserver:self selector:@s