OC仿支付宝输入UITextField输入车牌号
生活随笔
收集整理的這篇文章主要介紹了
OC仿支付宝输入UITextField输入车牌号
小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.
效果圖,如果使用,出現(xiàn)任何問題請(qǐng)告知,或者下方留言,我好以及改正
?
.h文件:
#import <UIKit/UIKit.h>@interface LicenseKeyBoardView : UIView - (instancetype)initWithFrame:(CGRect)frame withTextField:(UITextField *)textField; @end?
.m文件
#import "LicenseKeyBoardView.h" #define kWidth [UIScreen mainScreen].bounds.size.width #define kHeight [UIScreen mainScreen].bounds.size.height #define HEXCOLOR(hex, alp) [UIColor colorWithRed:((float)((hex & 0xFF0000) >> 16)) / 255.0 green:((float)((hex & 0xFF00) >> 8)) / 255.0 blue:((float)(hex & 0xFF)) / 255.0 alpha:alp]#define LicenseLength 7 //最大的車牌號(hào)長(zhǎng)度為7@interface LicenseKeyBoardView()<UIGestureRecognizerDelegate> {UIView *_backView1; //第一個(gè)view 省份UIView *_backView2; //第二個(gè)view 字母viewUIButton *_btn;//abc和返回按鍵 } @property (nonatomic, strong) NSArray *provinceArr; //省市簡(jiǎn)寫數(shù)組 @property (nonatomic, strong) NSArray *letterArr; //車牌號(hào)碼字母數(shù)字?jǐn)?shù)組 @property(nonatomic,strong)UITextField *textField; @end@implementation LicenseKeyBoardView- (NSArray *)provinceArr {if (!_provinceArr) {_provinceArr = @[@"京",@"津",@"渝",@"滬",@"冀",@"晉",@"遼",@"吉",@"黑",@"蘇",@"浙",@"皖",@"閩",@"贛",@"魯",@"豫",@"鄂",@"湘",@"粵",@"瓊",@"川",@"貴",@"云",@"陜",@"甘",@"青",@"蒙",@"桂",@"寧",@"新",@"",@"藏",@"使",@"領(lǐng)",@"警",@"學(xué)",@"港",@"澳",@""];}return _provinceArr; }- (NSArray *)letterArr {if (!_letterArr) {_letterArr = @[@"1",@"2",@"3",@"4",@"5",@"6",@"7",@"8",@"9",@"0",@"Q",@"W",@"E",@"R",@"T",@"Y",@"U",@"I",@"O",@"P",@"A",@"S",@"D",@"F",@"G",@"H",@"J",@"K",@"L",@"",@"Z",@"X",@"C",@"V",@"B",@"N",@"M",@""];}return _letterArr; }- (instancetype)initWithFrame:(CGRect)frame withTextField:(UITextField *)textField{frame = CGRectMake(0, 0, kWidth, kHeight*0.33);if (self = [super initWithFrame:frame]) {self.backgroundColor = [UIColor redColor];self.textField = textField;//注冊(cè)一個(gè)通知,后面會(huì)用到,來(lái)監(jiān)聽abc字母鍵[[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(textFAction:) name:@"abc" object:nil];//添加一個(gè)手勢(shì),點(diǎn)擊鍵盤外面收回鍵盤UITapGestureRecognizer *recognizer = [[UITapGestureRecognizer alloc] initWithTarget:self action:@selector(hiddenView)];recognizer.delegate = self;[self addGestureRecognizer:recognizer];[self setupUI];}return self; }- (void)setupUI {CGSize size = self.frame.size;_backView1 = [[UIView alloc] initWithFrame:self.bounds];_backView1.backgroundColor = HEXCOLOR(0xd2d5da, 1);_backView1.hidden = NO;_backView2 = [[UIView alloc] initWithFrame:self.bounds];_backView2.hidden = YES;_backView2.backgroundColor = HEXCOLOR(0xd2d5da, 1);[self addSubview:_backView1];[self addSubview:_backView2];int row = 4;int column = 10;CGFloat btnY = 4;CGFloat btnX = 2;CGFloat maginR = 5;CGFloat maginC = 10;CGFloat btnW = (size.width - maginR * (column -1) - 2 * btnX)/column;CGFloat btnH = (_backView1.frame.size.height - maginC * (row - 1) - 6) / row;CGFloat m = 12;CGFloat w = (size.width - 24 - 7 * btnW - 6 * maginR - 2 * btnX)/2;CGFloat mw = (size.width - 8 * maginR - 9 * btnW - 2 * btnX) / 2;NSLog(@"LY >> count - %zd", self.provinceArr.count);for (int i = 0; i < self.provinceArr.count; i++) {UIButton *btn = [UIButton buttonWithType:UIButtonTypeCustom];if (i / column == 3) {if (i == 30) {btn.frame = CGRectMake(btnX, btnY + 3 * (btnH + maginC), w, btnH);[btn setBackgroundImage:[UIImage imageNamed:@"key_abc"] forState:UIControlStateNormal];btn.enabled = NO;_btn = btn;}else if (i == 38) {btn.frame = CGRectMake(6 * (btnW + maginR) + btnW + w + m + m, btnY + 3 * (btnH + maginC), w, btnH);[btn setBackgroundImage:[UIImage imageNamed:@"key_over"] forState:UIControlStateNormal];}else {btn.frame = CGRectMake((i % column - 1)*(btnW + maginR) + w + m + btnX, btnY + 3 * (btnH + maginC), btnW, btnH);[btn setBackgroundImage:[UIImage imageNamed:@"key_number"] forState:UIControlStateNormal];}}else {btn.frame = CGRectMake(btnW * (i % column) + i % column * maginR + btnX, btnY + i/column * (btnH + maginC), btnW, btnH);[btn setBackgroundImage:[UIImage imageNamed:@"key_number"] forState:UIControlStateNormal];}[btn setTitleColor:HEXCOLOR(0x23262F, 1) forState:UIControlStateNormal];[btn setTitle:self.provinceArr[i] forState:UIControlStateNormal];btn.layer.cornerRadius = 3;btn.layer.masksToBounds = YES;btn.tag = i;[btn addTarget:self action:@selector(btn1Click:) forControlEvents:UIControlEventTouchUpInside];[_backView1 addSubview:btn];}for (int i = 0; i < self.letterArr.count; i++) {UIButton *btn = [UIButton buttonWithType:UIButtonTypeCustom];if (i >= 20 && i < 29) {btn.frame = CGRectMake(btnX + mw + (btnW + maginR) * (i % column), btnY + 2 * (btnH + maginC), btnW, btnH);[btn setBackgroundImage:[UIImage imageNamed:@"key_number"] forState:UIControlStateNormal];}else if (i >= 29) {if (i == 29) {btn.frame = CGRectMake(btnX, btnY + 3 * (btnH + maginC), w, btnH);[btn setBackgroundImage:[UIImage imageNamed:@"key_back"] forState:UIControlStateNormal];}else if (i == 37) {btn.frame = CGRectMake(6 * (btnW + maginR) + btnW + w + m + m + btnX, btnY + 3 * (btnH + maginC), w, btnH);[btn setBackgroundImage:[UIImage imageNamed:@"key_over"] forState:UIControlStateNormal];}else {btn.frame = CGRectMake((i % column)*(btnW + maginR) + w + m + btnX, btnY + 3 * (btnH + maginC), btnW, btnH);[btn setBackgroundImage:[UIImage imageNamed:@"key_number"] forState:UIControlStateNormal];}}else {btn.frame = CGRectMake(btnW * (i % column) + i % column * maginR + btnX, btnY + i/column * (btnH + maginC), btnW, btnH);[btn setBackgroundImage:[UIImage imageNamed:@"key_number"] forState:UIControlStateNormal];}[btn setTitleColor:HEXCOLOR(0x23262F, 1) forState:UIControlStateNormal];[btn setTitle:self.letterArr[i] forState:UIControlStateNormal];btn.layer.cornerRadius = 3;btn.layer.masksToBounds = YES;btn.tag = i;[btn addTarget:self action:@selector(btn2Click:) forControlEvents:UIControlEventTouchUpInside];[_backView2 addSubview:btn];} }- (void)btn1Click:(UIButton *)sender {// NSLog(@" >>> provinceArr: - %@ -- tag - %zd", self.provinceArr[sender.tag],sender.tag);_btn.enabled = YES;if (sender.tag == 30) {// NSLog(@"點(diǎn)擊了abc鍵");if (_backView2.hidden) {// NSLog(@"_backView2 隱藏了");_backView1.hidden = YES;_backView2.hidden = NO;}else {sender.enabled = NO;}}else if (sender.tag == 38){// 點(diǎn)擊刪除鍵if (_backView2.hidden) {[self deleteBtnClick];}}else {//點(diǎn)擊漢字字母或者數(shù)字鍵_backView1.hidden = YES;_backView2.hidden = NO;if(self.textField.text.length < LicenseLength){[self.textField insertText:self.provinceArr[sender.tag]];}} }- (void)btn2Click:(UIButton *)sender {if (sender.tag == 29) {// NSLog(@"點(diǎn)擊了abc鍵");_backView1.hidden = NO;_backView2.hidden = YES;}else if (sender.tag == 37) {// NSLog(@"點(diǎn)擊了刪除鍵");[self deleteBtnClick];}else {if(self.textField.text.length < LicenseLength){[self.textField insertText:self.letterArr[sender.tag]];}} } - (void)deleteBtnClick{[self.textField deleteBackward];if (self.textField.text.length == 1) {//刪除完了,沒有字符可以刪除了,切換顯示的view[self deleteEnd];} } /**如果textfield刪除完畢,則顯示省份*/ - (void)deleteEnd {_backView1.hidden = NO;_backView2.hidden = YES; }//通知的監(jiān)聽方法 - (void)textFAction:(NSNotification *)notification {// NSLog(@" >> info -- %@", notification.userInfo);NSString *str = notification.userInfo[@"text"];if (str.length == 0) {_btn.enabled = NO;}else if (str.length == 7) {[self hiddenView];}else {_backView1.hidden = YES;_backView2.hidden = NO;_btn.enabled = YES;} }//初次彈出鍵盤時(shí) - (void)showWithString:(NSString *)string {// NSLog(@" >> string -- %@", string);_backView1.hidden = YES;_backView2.hidden = NO;_btn.enabled = YES; }//收回鍵盤 - (void)hiddenView {CGSize size = [UIScreen mainScreen].bounds.size;[UIView animateWithDuration:0.3 animations:^{CGRect frame = self->_backView1.frame;frame.origin.y = size.height;self->_backView1.frame = frame;} completion:^(BOOL finished) {[self removeFromSuperview];}];[UIView animateWithDuration:0.3 animations:^{CGRect frame = self->_backView2.frame;frame.origin.y = size.height;self->_backView2.frame = frame;} completion:^(BOOL finished) {[self removeFromSuperview];}]; }//手勢(shì)的代理方法 #pragma mark >> UIGestureRecognizerDelegate - (BOOL)gestureRecognizer:(UIGestureRecognizer *)gestureRecognizer shouldReceiveTouch:(UITouch *)touch {if ([touch.view isDescendantOfView:_backView1] ||[touch.view isDescendantOfView:_backView2] ) {return NO;}return YES; }//銷毀通知 - (void)dealloc {[[NSNotificationCenter defaultCenter] removeObserver:self]; }@end?
??使用:
?
該封裝使用了四張圖片:
?
轉(zhuǎn)載于:https://www.cnblogs.com/hualuoshuijia/p/10007452.html
總結(jié)
以上是生活随笔為你收集整理的OC仿支付宝输入UITextField输入车牌号的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 搭建TXManager分布式事务协调者
- 下一篇: 关于linux中的 秘钥认证 ,最清晰解