加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

ios – 为UITextField实现输入掩码

发布时间:2020-12-14 19:04:16 所属栏目:百科 来源:网络整理
导读:我正在寻找一种方法来实现UITextField的输入掩码,如下所示: 主要特点: 在光标右侧显示一个空字符的占位符 禁止输入当前光标位置的错误字符(例如,第一个字符只能是拉丁字符,第二个字符只能是数字) 禁止选择,剪切和粘贴 禁止设置光标位置(用户只能添加新的字
我正在寻找一种方法来实现UITextField的输入掩码,如下所示:

主要特点:

>在光标右侧显示一个空字符的占位符
>禁止输入当前光标位置的错误字符(例如,第一个字符只能是拉丁字符,第二个字符只能是数字)
>禁止选择,剪切和粘贴
>禁止设置光标位置(用户只能添加新的字符或删除最后一个字符)

解决方法

我能够使用UITextField子类获得所有这些功能.您可能希望将这些委托方法移动到ViewController中并在那里设置自定义TextField委托.为了这个例子,更容易向你展示一个类中的所有内容.显然,您将不得不调整那些允许满足您需求的字符集.

#import "TextField.h"

@interface TextField()<UITextFieldDelegate>

@end

@implementation TextField

-(instancetype)initWithFrame:(CGRect)frame
{
    self = [super initWithFrame:frame];
    if (self) {
        self.delegate = self;
    }
    return self;
}

- (UITextPosition *)closestPositionToPoint:(CGPoint)point{
    UITextPosition *beginning = self.beginningOfDocument;
    UITextPosition *end = [self positionFromPosition:beginning offset:self.text.length];
    return end;
}

- (BOOL)canPerformAction:(SEL)action withSender:(id)sender
{
    if (action == @selector(paste:)
        || action == @selector(select:)
            || action == @selector(selectAll:)
                || action == @selector(cut:)){
        return NO;
    }
    return [super canPerformAction:action withSender:sender];
}

-(BOOL)textField:(UITextField *)textField shouldChangeCharactersInRange:(NSRange)range replacementString:(NSString *)string
{
    if (range.location == 0 && [string rangeOfCharacterFromSet:[NSCharacterSet letterCharacterSet]].location == NSNotFound) {
        return NO;
    }else if (range.location == 1 && [string rangeOfCharacterFromSet:[NSCharacterSet decimalDigitCharacterSet]].location == NSNotFound){
        return NO;
    }

    return YES;
}

@end

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读