最近在項目中需要使用UITextField作為密碼輸入框,并進行明文/密文切換。在進行代碼編寫的時候,遇到了一些問題。現(xiàn)將這些問題記錄下來,供大家參考。
NO.1 明/密文切換時,文本長度會改變,而光標的位置不跟隨文本的改變而改變。
解決方法1: 點擊按鈕切換明/密文時,讓UITextField變成第一響應(yīng)。
[self.textField becomeFirstResponder];
解決方法2:點擊按鈕切換明/密文時,保存UITextField的text屬性值。將其置空再賦值。
NSString*textStr =self.textField.text;
self.textField.text=@"";
self.textField.text= textStr;
NO.2 明/密文切換時,文本字體會改變。
解決方法:點擊按鈕切換明/密文時,設(shè)置UITextField字體為原字體。
self.textField.font=nil;
self.textField.font= [UIFontsystemFontOfSize:16];
NO.3 UITextField經(jīng)過 密文->明文->密文 的過程后,再輸入之前的文本會被清空。
解決方法:設(shè)置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;
}
結(jié)尾附上Demo地址:https://github.com/wfalloc/UITextFieldBug.git