亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb

首頁 > 系統 > iOS > 正文

詳解iOS 驗證碼輸入的實現思路

2019-10-21 18:39:26
字體:
來源:轉載
供稿:網友

iOS,驗證碼

如圖所示,現在很多App采用了類似下劃線、方塊等方式的驗證碼輸入,直觀美觀!對于這種效果的實現方式,大概有以下幾種方式:

1.多個UITextField組成

這種方式好處是有光標閃爍、但是在處理刪除和動畫效果時,就會顯得有點笨拙,OFO應該是這樣實現的,要嚴格處理好每個UITextField的FirstResponder。

2.一個UITextField組成,使用富文本

這個方式是可行的, 使用富文本設置每個字符的間距,允許編輯富文本,有光標閃爍,缺點應該也是不好處理動畫效果。

3.使用UIView繪制

這個是我在GitHub上看到的一個半成品Demo,利用一個UIView,使用Quartz 2D和UIBezierPath進行繪制文本和下劃線,并處理輸入事件和鍵盤事件,其實整體下來代碼也不多,300行以內,但是需要較好的iOS繪制功底。

4.一個UITextField和多個UILabel

這個是我接下來介紹的思路,這個思路的缺點應該是沒有光標閃爍,其實也能偽實現,看是否必須要有這個需要了。這個思路比較簡單,方便加入動畫,純粹下來就100多行,接下來看結構和代碼:

iOS,驗證碼

新建一個UIView,初始化方法

- (instancetype)initWithCount:(NSInteger)count margin:(CGFloat)margin{  if (self = [super init]) {    self.itemCount = count; // itemCount是驗證碼的個數,比如6個    self.itemMargin = margin; // itemMargin是每個Label之間的間距    [self configTextField];  }  return self;}

添加內部子控件(演示)

- (void)configTextField{  UITextField *textField = [[UITextField alloc] init];  textField.autocapitalizationType = UITextAutocapitalizationTypeNone;  textField.keyboardType = UIKeyboardTypeNumberPad;  [textField addTarget:self action:@selector(tfEditingChanged:) forControlEvents:(UIControlEventEditingChanged)];  // 小技巧:這個屬性為YES,可以強制使用系統的數字鍵盤,缺點是重新輸入時,會清空之前的內容  // clearsOnBeginEditing 屬性并不適用于 secureTextEntry = YES 時  // textField.secureTextEntry = YES;  [self addSubview:textField];  self.textField = textField;  // 小技巧:通過textField上層覆蓋一個maskView,可以去掉textField的長按事件  UIButton *maskView = [UIButton new];  maskView.backgroundColor = [UIColor whiteColor];  [maskView addTarget:self action:@selector(clickMaskView) forControlEvents:(UIControlEventTouchUpInside)];  [self addSubview:maskView];  self.maskView = maskView;  for (NSInteger i = 0; i < self.itemCount; i++)  {    UILabel *label = [UILabel new];    [self addSubview:label];    [self.labels addObject:label];  }  for (NSInteger i = 0; i < self.itemCount; i++)  {    UIView *line = [UIView new];    [self.lines addObject:line];  }}

這里可能對maskView有點費解,maskView主要是為了擋住下面的UITextField,使用類UIButton是為了擋住事件,因為如果使用類UIView,會將事件傳遞到self,進而影響到外面隱藏鍵盤的代碼,你可以試試就知道了。

主要處理業務邏輯的代碼

#pragma mark - 編輯改變- (void)tfEditingChanged:(UITextField *)textField{  if (textField.text.length > self.itemCount) {    textField.text = [textField.text substringWithRange:NSMakeRange(0, self.itemCount)];  }  for (int i = 0; i < self.itemCount; i++)  {    UILabel *label = [self.labels objectAtIndex:i];    if (i < textField.text.length) {      label.text = [textField.text substringWithRange:NSMakeRange(i, 1)];    } else {      label.text = nil;    }  }  // 輸入完畢后,自動隱藏鍵盤  if (textField.text.length >= self.itemCount) {    [textField resignFirstResponder];  }}

這里沒有使用UITextField的delegate,使用UIControlEventEditingChanged足以,但是如果你的需求能輸入英文等其他字符,就需要實現delegate去限制。

至此,驗證碼輸入的核心代碼就沒有了,是不是感覺這么少!!在此基礎上,我用Demo實現了3個基本效果,如圖所示:

iOS,驗證碼

Github代碼地址: 點我

小技巧Tip

當你不想讓別人使用某個方法時,除了私有方法辦法之外,還可以這么做:

- (instancetype)init UNAVAILABLE_ATTRIBUTE;+ (instancetype)new UNAVAILABLE_ATTRIBUTE;

 

總結

以上所述是小編給大家介紹的iOS 驗證碼輸入的實現思路,希望對大家有所幫助,如果大家有任何疑問請給我留言,小編會及時回復大家的。在此也非常感謝大家對VEVB武林網網站的支持!


注:相關教程知識閱讀請移步到IOS開發頻道。
發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb
久青草国产97香蕉在线视频| 亚洲国产精品免费| 91成人精品网站| 亚洲美女中文字幕| 亚洲一品av免费观看| 欧美最猛性xxxxx(亚洲精品)| 成年无码av片在线| 欧美激情精品久久久久久变态| 最近的2019中文字幕免费一页| 国产精品老女人视频| 日韩亚洲精品电影| 成人免费看吃奶视频网站| 中文字幕国产日韩| 国产美女搞久久| 国产精品777| 亚州精品天堂中文字幕| 91a在线视频| 亚洲国产古装精品网站| 欧美性色19p| 国产美女搞久久| 亚洲国产97在线精品一区| 中文字幕亚洲精品| 成人xvideos免费视频| 国产精品丝袜高跟| 欧美激情按摩在线| 亚洲最新视频在线| 九九视频直播综合网| 久久久精品网站| 亚洲奶大毛多的老太婆| 国产午夜精品一区理论片飘花| 日韩在线欧美在线国产在线| 91精品久久久久久久久久久久久久| 成人观看高清在线观看免费| 欧美一级成年大片在线观看| 欧美激情欧美激情| 狠狠躁夜夜躁久久躁别揉| 亚洲成人1234| 懂色aⅴ精品一区二区三区蜜月| 亚洲另类xxxx| 日韩国产精品亚洲а∨天堂免| 亚洲精品成人网| 成人午夜小视频| 国产精品入口福利| www.日韩av.com| 亚洲欧美日韩国产精品| 日本a级片电影一区二区| 国产精品爽爽爽爽爽爽在线观看| 夜夜嗨av一区二区三区免费区| 97av在线视频免费播放| 国产精品久久久久久久久影视| 精品国产成人在线| 国产免费一区视频观看免费| 国产精品黄色影片导航在线观看| 欧美激情精品久久久久久变态| 日本欧美一级片| 日本伊人精品一区二区三区介绍| 成人激情在线播放| 日韩高清有码在线| 国产a∨精品一区二区三区不卡| 欧美三级欧美成人高清www| 精品久久久久久久久国产字幕| 欧洲亚洲免费在线| 98精品在线视频| 欧美激情三级免费| 国产福利成人在线| 亚洲精品福利视频| 黑人狂躁日本妞一区二区三区| 欧美一区三区三区高中清蜜桃| 国产999在线观看| 日韩国产欧美精品一区二区三区| 国产精品中文字幕久久久| 欧美激情小视频| 欧美日韩精品在线视频| 国产国产精品人在线视| 欧美激情视频在线免费观看 欧美视频免费一| 欧美老女人bb| 成人福利在线观看| 亚洲国产三级网| 日韩有码片在线观看| 国产日韩精品入口| 一本色道久久综合狠狠躁篇怎么玩| 欧美激情第99页| 欧美黄色小视频| 97精品伊人久久久大香线蕉| 亚洲精品aⅴ中文字幕乱码| 亚洲午夜未删减在线观看| 18久久久久久| 欧美第一黄网免费网站| 69视频在线免费观看| 最新69国产成人精品视频免费| 92看片淫黄大片欧美看国产片| 国产精品久久久av久久久| 亚洲欧美中文在线视频| 国产亚洲欧美另类中文| 国产午夜一区二区| 欧美日韩国产限制| 97在线视频免费| 欧美精品一区在线播放| 不卡中文字幕av| 成人激情视频在线观看| 日韩精品极品视频免费观看| 成人久久久久久久| 国产福利精品在线| 成人久久久久久| 亚洲国产精品嫩草影院久久| 国产精品久在线观看| 国产精品69久久| 精品高清一区二区三区| 国内精品久久久久影院 日本资源| 国产一区二区美女视频| 欧美在线xxx| 国产精品丝袜久久久久久高清| 国产精品久久久久久久久免费看| 日韩精品视频免费专区在线播放| 亚洲性无码av在线| 欧美丝袜第一区| 九九久久久久99精品| 亚洲www在线| 亚洲国产成人精品久久久国产成人一区| 国产精品aaaa| 亚洲精品99久久久久中文字幕| 欧洲永久精品大片ww免费漫画| 欧美性高潮床叫视频| 中国日韩欧美久久久久久久久| 欧美性xxxxx极品娇小| 91精品啪aⅴ在线观看国产| 亚洲国产91色在线| 亚洲加勒比久久88色综合| 色妞在线综合亚洲欧美| 51久久精品夜色国产麻豆| 久久久亚洲精选| 自拍偷拍免费精品| 在线观看国产成人av片| 欧美壮男野外gaytube| 日韩综合视频在线观看| 78色国产精品| 国产精品夜色7777狼人| 久久久久日韩精品久久久男男| 日韩av电影在线免费播放| 奇门遁甲1982国语版免费观看高清| 日韩久久精品成人| 黄色成人av在线| 久久久精品久久久久| 亚洲成人亚洲激情| 亚洲成人免费在线视频| 插插插亚洲综合网| 成人激情在线播放| 久久久日本电影| 国产一区二区美女视频| 91亚洲va在线va天堂va国| 91久久精品久久国产性色也91| 久久精品电影一区二区| 成人精品一区二区三区电影黑人| 中文字幕亚洲一区二区三区| 亚洲剧情一区二区| 久久精品国产96久久久香蕉| 久久久999成人| 亚洲国产成人久久综合| 亚洲精品自拍偷拍| 国产亚洲a∨片在线观看| 亚洲精品久久久久久久久久久久| 久久久噜噜噜久久久| 国产亚洲精品美女久久久久| 成人a级免费视频|