iOS12新增一个功能就是可以自动填充验证码,当你点击键盘上面的验证码时,如果这时你也写了UIControlEventEditingChanged,那么这时你会走两次相同的回调。
如果你是直接返回一般没问题,如果你需监听验证码输入正确过后自动跳下一个界面,那么就会连续跳两个界面!!!
项目中的验证码页面是这样的:
验证码自动填充后自动跳到第二个页面,但是由于自己也写了UIControlEventEditingChanged,这个方法会走两次,如果不自动填充,手动填写就没得问题喽!于是想办法想禁用掉这个自动填充,但是这个体验对用户并不友好了,好像也禁用不了....还是在UIControlEventEditingChanged这个方法的做文章吧,这是根源,只让他走一次方法就好了。直接上代码:
- (void)tfEditingChanged:(UITextField *)textField
{
UITextRange *selectedRange = textField.markedTextRange;//获取高亮部分
if (selectedRange == nil || selectedRange.empty) {
// 自定义请求
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];
if (self.handleCode) {
self.handleCode(self.code);
}
}
}
else
{
return;
}
}
有些代码可以省略,主要是自定义请求写上你自己的方法就好了。说实话,这自动填充对于这种登录流程给开发者造成一丁点的困扰,不过找到解决方法毕竟是好的结果。希望也对别人有所帮助吧。