美文网首页
iOS明文密文切换时问题

iOS明文密文切换时问题

作者: 魔力双鱼 | 来源:发表于2018-11-30 15:36 被阅读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;
    }
    

    相关文章

      网友评论

          本文标题:iOS明文密文切换时问题

          本文链接:https://www.haomeiwen.com/subject/jwoccqtx.html