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

最近在項目中需要使用UITextField作為密碼輸入框,并進行明文/密文切換。在進行代碼編寫的時候,遇到了一些問題。現(xiàn)將這些問題記錄下來,供大家參考。

NO.1 明/密文切換時,文本長度會改變,而光標的位置不跟隨文本的改變而改變。

密文狀態(tài)


明文狀態(tài)

解決方法1: 點擊按鈕切換明/密文時,讓UITextField變成第一響應。

[self.textField becomeFirstResponder];

解決方法2:點擊按鈕切換明/密文時,保存UITextField的text屬性值。將其置空再賦值。

NSString*textStr =self.textField.text;

self.textField.text=@"";

self.textField.text= textStr;


使用后切換到明文狀態(tài)時

NO.2 明/密文切換時,文本字體會改變。


正常狀態(tài)下的文本顯示


從密文切換到明文的文本顯示

解決方法:點擊按鈕切換明/密文時,設置UITextField字體為原字體。

self.textField.font=nil;

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

NO.3 UITextField經(jīng)過 密文->明文->密文 的過程后,再輸入之前的文本會被清空。

解決方法:設置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

最后編輯于
?著作權歸作者所有,轉載或內(nèi)容合作請聯(lián)系作者
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務。

推薦閱讀更多精彩內(nèi)容