iOS 车牌号输入键盘PlateKeyBoard

这篇博客介绍了如何在iOS应用中通过替换UITextField的inputView来创建自定义的车牌号输入键盘。作者详细讲解了如何获取当前系统响应链的第一响应者,并利用此来处理数字输入和退格操作。此外,还讨论了在复制粘贴时如何控制键盘切换键的状态,以确保输入内容符合车牌号的规则。
摘要由CSDN通过智能技术生成

重点:

通过替换UITextField的inputView展示自定义键盘
获取当前系统响应链第一响应者:

UIResponder并没有提供直接获取的方法、这里调用sendAction:to:from:forEvent:方法。

当target为空时、系统会遍历响应链由第一响应者响应事件,这样我们就获取到第一响应者。

我们通过获取到的responder实现键盘数字的输入及退格操作

复制粘贴时键盘的切换键钮状态:

通过UIControlEventEditingChanged获取键盘点击后输入框内容的改变

在textField:shouldChangeCharactersInRange:replacementString:获取复制粘贴内容及进行规则判断

//ViewController.m

#import "ViewController.h"
#import "PlateInputView.h"

#define WIDTH [UIScreen mainScreen].bounds.size.width
#define HEIGHT [UIScreen mainScreen].bounds.size.height


@interface ViewController ()<UITextFieldDelegate>


@property (nonatomic,strong)PlateInputView * plateInput;
@property (nonatomic,strong)UITextField * plateTextField;


@end

@implementation ViewController

- (void)viewDidLoad {
   [super viewDidLoad];
   
   _plateTextField = [[UITextField alloc]initWithFrame:CGRectMake(30, 100, WIDTH-60, 50)];
   _plateTextField.delegate = self;
   _plateTextField.layer.borderColor = [UIColor blackColor].CGColor;
   _plateTextField.layer.borderWidth = 1;
   _plateTextField.keyboardType = UIKeyboardTypeNumberPad;//设置数字键盘防止复制粘贴板自动加空格
   __block ViewController * weakSelf = self;
   _plateInput = [[PlateInputView alloc]init];
   _plateInput.sendTextBlock = ^(NSString *palteString) {
       weakSelf.plateTextField.text = palteString;
   };
   
   _plateTextField.inputView = _plateInput;
   [_plateTextField addTarget:self action:@selector(textChange:) forControlEvents:UIControlEventEditingChanged];
   [self.view addSubview:_plateTextField];
   
   
   UITapGestureRecognizer * tap = [[UITapGestureRecognizer alloc]initWithTarget:self action:@selector(tapClick:)];
   [self.view addGestureRecognizer:tap];
   // Do any additional setup after loading the view, typically from a nib.
}

#pragma mark 车牌号输入框监听及代理方法

-(void)textChange:(UITextField *)textField{
   NSString * str = textField.text;
   _plateInput.plateStr = str;
}
-(BOOL)textField:(UITextField *)textField shouldChangeCharactersInRange:(NSRange)range replacementString:(NSString *)string{
   
   NSString * str = textField.text;
   
   string = [string stringByReplacingOccurrencesOfString:@" " withString:@""];
   str = [str stringByReplacingCharactersInRange:range withString:string];
   
   if (str.length>0) {
       NSArray * provinceArr = @[@"京",@"津",@"晋",@"冀",@"蒙",@"辽",@"黑",@"吉",@"沪",@"苏",@"浙",@"皖",@"闽",@"赣",
                                 @"鲁",@"豫",@"鄂",@"湘",@"粤",@"桂",@"琼",@"渝",@"川",@"贵",@"云",@"藏",@"陕",@"甘",
                                 @"青",@"宁",@"新",@"W"];
       
       if (str.length>8) {
           return NO;
       }
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值