iOS UITextField 明/密文切换的一些坑

作者: 天蝎洋芋 | 来源:发表于2016-06-16 15:10 被阅读2215次

    最近在项目中需要使用UITextField作为密码输入框,并进行明文/密文切换。在进行代码编写的时候,遇到了一些问题。现将这些问题记录下来,供大家参考。

    NO.1 明/密文切换时,文本长度会改变,而光标的位置不跟随文本的改变而改变。

    密文状态 明文状态

    解决方法1: 点击按钮切换明/密文时,让UITextField变成第一响应。

    [self.textField becomeFirstResponder];

    解决方法2:点击按钮切换明/密文时,保存UITextField的text属性值。将其置空再赋值。

    NSString*textStr =self.textField.text;

    self.textField.text=@"";

    self.textField.text= textStr;

    使用后切换到明文状态时

    NO.2 明/密文切换时,文本字体会改变。

    正常状态下的文本显示 从密文切换到明文的文本显示

    解决方法:点击按钮切换明/密文时,设置UITextField字体为原字体。

    self.textField.font=nil;

    self.textField.font= [UIFontsystemFontOfSize:16];

    NO.3 UITextField经过 密文->明文->密文 的过程后,再输入之前的文本会被清空。

    解决方法:设置UITextField的delegate,在下面的代理方法中控制文本的改变。

    - (BOOL)textField:(UITextField*)textField shouldChangeCharactersInRange:(NSRange)range replacementString:(NSString*)string

    - (BOOL)textField:(UITextField*)textField shouldChangeCharactersInRange:(NSRange)range replacementString:(NSString*)string{

    NSString*allStr = [textField.textstringByReplacingCharactersInRange:rangewithString:string];

    if(textField.isSecureTextEntry==YES) {

    textField.text= allStr;

    returnNO;

    }

    returnYES;

    }

    结尾附上Demo地址:https://github.com/wfalloc/UITextFieldBug.git

    相关文章

      网友评论

      • 579971f7aa61:明密文切换后,密码圆点会变得很大,请问如何解决。
        Rickie_Lambert:@不要猜_w 好吧, 这好像 就是 苹果的 bug
        579971f7aa61:@Mr_Rain 还没有......
        Rickie_Lambert:@不要猜_w 这为朋友 这个 问题你 解决了吗?? 同求, 密码圆点切换的时候 会有 大小不一样的切换
      • 傲视众生的冰块:可以可以,很实用
      • 章鱼paul帝:还有一个问题是密文切换明文时 键盘样式会变成常用键盘 而不是安全键盘
        ZhangCc_:我也遇到这个问题,你们解决了吗?
        鬼丶白:我也遇到这个问题了,请问您那边解决了吗?0.0
        magicGary:@章鱼paul帝 我也遇到这个问题了,请问您那边解决了吗?
      • 王大虾34:有用,赞:+1:🏻
      • 常斯温:这个真心不错。赞一个,前几个问题都碰到了。
      • 6991a5a482e5:不错不错,收藏了
        天蝎洋芋:@dxykevin 谢谢!
      • af4e8a35bc89:感觉是个特实用的demo 虽然没遇到过这种需求 。收藏了
        天蝎洋芋:@日照江湖美 非常感谢!

      本文标题:iOS UITextField 明/密文切换的一些坑

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