iOS12出來也有一段時(shí)間了,上線項(xiàng)目遇到一個(gè)問題,就是自動(dòng)填充驗(yàn)證碼的時(shí)候,對(duì)應(yīng)的焦點(diǎn)textField不正確。

我們的輸入驗(yàn)證碼界面
這是我們的界面。

借用網(wǎng)圖
借用一個(gè)網(wǎng)圖。。當(dāng)點(diǎn)擊紅圈按鈕的時(shí)候,所有驗(yàn)證碼2868全部跑到了第一個(gè)textfield里面。
當(dāng)你有四個(gè)textfield作為接受驗(yàn)證碼的時(shí)候,其實(shí)很好解決。
首先新建一個(gè)textfield,這里我用的是自己封裝的textfield
@property(nonatomic,strong) XZTextField *quickTF;
然后在初始化方法里面聲明。
if (@available(iOS 12.0, *)) {
self.quickTF = [[XZTextField alloc]init:15
mode:UITextFieldViewModeNever
place:nil
frame:CGRectZero];
self.quickTF.textContentType = UITextContentTypeOneTimeCode;
[self.quickTF addTarget:self action:@selector(quickInput) forControlEvents:UIControlEventEditingChanged];
}
對(duì)這個(gè)textfield進(jìn)行變化值的監(jiān)聽,并且設(shè)置它的textContentType屬性為UITextContentTypeOneTimeCode。
- (void)quickInput{
NSString *code = self.quickTF.text;
if (code.length != 4) {
return;
}
for (NSInteger idx = 0; idx < self.tfs.count; idx ++) {
XZTextField *tf = (XZTextField *)self.tfs[idx];
tf.text = [code substringWithRange:NSMakeRange(idx,1)];
}
}
然后對(duì)收到的值進(jìn)行判斷處理。我們的驗(yàn)證碼為4位數(shù)的,所以判斷了它的長度。然后用for循環(huán)遍歷斤每一個(gè)驗(yàn)證碼的textfield里面。
這樣就完美實(shí)現(xiàn)了該功能!