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

最近在项目中需要使用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

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容