美文网首页设计师要了解的技术iOS学习交流iOS学习笔记
iOS UITextField 的坑:切换明文/密文显示末尾空白

iOS UITextField 的坑:切换明文/密文显示末尾空白

作者: 戴仓薯 | 来源:发表于2016-03-07 20:33 被阅读5627次

    密码框有个常见的需求:用一个按钮切换密码的明文/密文显示。点一下显示明文,再点一下显示密文。

    本来是个很简单的需求,因为 UITextField 有secureTextEntry这个属性可以用。但没想到,简单的一句代码并不能解决问题:

    - (IBAction)secureSwitchAction:(id)sender {
        self.passwordTextField.secureTextEntry = !self.passwordInputTextField.secureTextEntry;
    }
    

    问题在于,在切换明文/密文的时候,如果切换前后的字符串宽度不一样,字符串末尾到光标之间会出现一大段空白。

    切换之后,光标前面有一段空白

    官方文档里也没提这件事,估计又是官方实现的一个 bug 了。好在只需要简单加几句代码:

    - (IBAction)secureSwitchAction:(id)sender {
        self.passwordTextField.secureTextEntry = !self.passwordTextField.secureTextEntry;
        
        NSString* text = self.passwordTextField.text;
        self.passwordTextField.text = @" ";
        self.passwordTextField.text = text;
    }
    

    就能解决问题了。

    p.s. 我当时还查到了这篇文章 只用一行代码[self.passwordInputTextField becomeFirstResponder];就能解决这个问题,只是副作用是会让输入焦点切换到密码框。如果不介意的话,用这个方法也可以。

    相关文章

      网友评论

      • 翻滚的炒勺2013:还有一个bug 明文暗文切换从头输入
      • 列奥那多达芬奇:求这个demo,想看一下你右边的两个按钮是怎么加的 550936272@qq.com
      • 强子ly:切换的时候直接把光标关闭了不就行了,想编辑再重新点开
      • a8c352e948aa:有Demo吗,楼楼
      • 漂泊的煙烣:demo可以给参考下么?谢谢 iosyong@163.com
      • Veer_Pan:这一页代码可以麻烦给我参考下吗,我想看看你密码输入框后面两个按钮怎么做的,我邮箱panzhiwen123@foxmail.com
        漂泊的煙烣:@Veer_Pan 这个代码也给我参考下吧,谢谢,iosyong@163.com
      • 预备攻城狮:今天在完善App时也遇到了这个问题, 也同样想到了重新设置为第一响应者的方法. 但是也觉得不够完美会让它不是焦点的时候成为第一响应者并弹出键盘.
        但是解决这个问题很简单,你只需要加一个判断就行了 if ([_textField isFirstResponder]) { //becomeFirstResponder }
        这样就完美解决这个问题了,而且显得更优雅一些
        : )
        预备攻城狮:@戴仓薯 然而...现在我又找到了一个方法...能同时解决切换明暗文字体会改变和光标位置重新适配的方法..
        textField.font = nil;
        textField.font = [UIFont systemFontOfSize:15];
        虽然怪怪的, 但是很好用.! 可以省去上面那一步了..
        戴仓薯:@预备攻城狮 是的,很棒的想法~~
      • 随意_M:明文切换成密文时,原来的text会被清空,作者遇到了吗?有办法解决吗
        戴仓薯:@浩楠哥的小猴子 哈哈哈,赞~~
        随意_M:@戴仓薯 网上查了下,好像是苹果系统的原因,暗文切明文继续编辑就可以,明文切暗文继续编辑就清空,不过受你启发,先将已输入的内容保存下来,切换后再给它insert 就解决那个问题了:stuck_out_tongue_winking_eye:
        戴仓薯:@浩楠哥的小猴子 我真的没遇到啊,你们怎么会遇到这么多奇奇怪怪的问题 > < 看看是不是delegate方法给清了…… 然后 textField 有一个属性是获得焦点就清空内容的,看有没有设为 YES?
      • 鼻毛长长:切换的按钮是写在了leftView里还是一个新的view?
        戴仓薯:@鼻毛长长 自己写的新的 button, rightView 要显示那个清空的按钮,我没想去用 leftView,感觉略有点奇怪
      • 874e2a220e95:同上 有解决办法吗?
        戴仓薯:@老城新事 啊,我觉得很奇怪,我自己没遇到。请问你们是专门设置了字体吗?还是默认的字体?
      • e9070f1600cf:密文切换明文的时候 textFlied里面的字体会有变化 这个是苹果的bug吗? 有比较好的解决办法吗?
        e9070f1600cf:@戴仓薯 就是系统的textFied 有个按钮控制明文切换,切换几次就发现字体变了
        戴仓薯:@Rdxer 我没有发现这问题呀?请问你们是怎么重现的?用的什么字体呢?
        Rdxer:@斗志昂扬的达哥 同问

      本文标题:iOS UITextField 的坑:切换明文/密文显示末尾空白

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