今天碰到了一个奇怪的问题.我正在写一个密码输入界面,在设置textField上面的黑点时,一开始,我的代码是这样的,
`
//添加小黑点
for (int j = 0; j < 6; j ++) {
UIView *dotView = [[UIView alloc] init];
dotView.tag = j;
dotView.hidden = YES;
dotView.backgroundColor = [UIColor blackColor];
dotView.layer.cornerRadius = 10;
[passwordTextField addSubview:dotView];
[self.dotArr addObject:dotView];
[dotView mas_makeConstraints:^(MASConstraintMaker *make) {
make.centerY.equalTo(passwordTextField.mas_centerY);
make.width.height.mas_equalTo(20);
make.centerX.equalTo(passwordTextField.mas_right).multipliedBy((1 + 2 * j) / 12.0);
}];
}
//监听文本变化
- (void)textFieldDidChange:(UITextField *)textfield {
//只有tag小于密码个数才能显示
for (UIView *dotView in self.dotArr) {
if (dotView.tag <= (_passwordTextField.text.length - 1)) {
dotView.hidden = NO;
} else {
dotView.hidden = YES;
}
}
//如果密码输入达到6位
if (_passwordTextField.text.length == 6) {
//隐藏键盘
[_passwordTextField resignFirstResponder];
[self modifyPayPassword];
}
}
dotView.tag < -1
调试过程中,我输入前,一切正常.输入几个数字,然后全部删掉,那么问题就出现了,删掉最后一个数字时,小黑点就全部显示出来了

百思不得解,突然我灵机一动,发现如果删除最后一个小黑点,那么就会出现的情况,会不会有关系呢,然后我将代码修改成
//监听文本变化
- (void)textFieldDidChange:(UITextField *)textfield {
//只有tag小于密码个数才能显示
for (UIView *dotView in self.dotArr) {
if (dotView.tag < _passwordTextField.text.length) {
dotView.hidden = NO;
} else {
dotView.hidden = YES;
}
}
//如果密码输入达到6位
if (_passwordTextField.text.length == 6) {
//隐藏键盘
[_passwordTextField resignFirstResponder];
[self modifyPayPassword];
}
}
`这样就正常了,我也不知道内中的解释,现在项目忙,我就先记录一下.