iOS明文密文切换时问题

2018-11-30  本文已影响0人  魔力双鱼

产品有个需求,输入密码框,可以进行明文密文切换。实现了切换,但是实际自己点的时候,发现了3个问题。(ios11出现这个问题,ios12没有这个问题,估计是苹果修改了这个bug)记录一下解决方案。

出现的问题:

1.密文模式下输入英文数字,再切换明文,光标前会出现空格。

如图:


英文密.png 英文明.png

2.输入中文,明文-密文切换时,光标会插在字符中。

中文密.png 中文明.png

实现思路:先清空输入框,再赋值

- (IBAction)openEyes:(UIButton *)sender {
    sender.selected = !sender.selected;
    //密文明文更换时候的出现空格 或者光标错乱
    NSString *text = self.passwordTextField.text;
    self.passwordTextField.text = @"";
    self.passwordTextField.secureTextEntry = !sender.selected;
    self.passwordTextField.text = text;
}

3.密文时输入文字清空

当UITextField经历 明文->密文->明文 时,再次输入,无论你输入什么,都会将所有输入清空。

嗯,这确实是个头疼的问题,也没有任何理由,因为UITextField本身如此,而且当时真的想不到任何办法。

最后终于解决。

思路是这样的:我们都只到UITextField的代理UITextFieldDelegate中有方法
「- (BOOL)textField:(UITextField *)textField shouldChangeCharactersInRange:(NSRange)range replacementString:(NSString *)string; 」相信每个人都会常用,通常我们用来抓用户输入的文字,在每次textfield发生字符改变的时候。

但是我们忽略了这个方法的本身作用,注意返回值,这个方法本身是用来返回「是否允许改变textfield字符」
实现思路:在代理里面,加多一个判断能避免密文清空的问题。

// 1.避免明文切换成密文后被清空
- (BOOL)textField:(UITextField *)textField shouldChangeCharactersInRange:(NSRange)range replacementString:(NSString *)string
{
    NSString *toBeString = [textField.text stringByReplacingCharactersInRange:range withString:string];
    if (textField == self.passwordTextField && textField.isSecureTextEntry) {
        textField.text = toBeString;
        return NO;
    }
    return YES;
}
上一篇下一篇

猜你喜欢

热点阅读