ios - 为 UITextField 实现输入掩码

标签 ios objective-c xcode swift

我正在寻找一种方法来实现 UITextField 的输入掩码,如下所示:enter image description here

主要特点:

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

最佳答案

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

#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

关于ios - 为 UITextField 实现输入掩码,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29780026/

相关文章:

ios - 双向词典结构是否可用?

c++ - 如何使用erase和iterator删除二维 vector 中的某一项?

ios - 在 NSUserDefaults 中保存自定义类对象的数组?

ios - 使用手势快速移动标签位置

ios - 如何将字符串日期转换为以毫秒为单位的 swift 3

ios - 如果一个对象的属性不满足它的谓词,是否可以让 NSFetchedResultsController 删除一个对象?

objective-c - 将应用程序配置保存在 plist 文件中的最佳实践

iphone - XCode 的内存泄漏仪器时间线中的歧义

iphone - 消耗品应用内购买和恢复按钮

ios - 主要方法中的 SIGABRT - 遵循 20 行代码的基本教程......有什么问题?