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