iOS——密碼明文/密文切換問題
前段時間根據產品經理的要求給我們輸入密碼的部分加了明文/密文切換,中間也遇到了一些頗有意思的問題。其中也有些很難查到資料。
在這裡記錄下來,也供大家參考,避免大家重複踩坑。
情景描述
明文/密文切換,就是輸入密碼的時候可以選擇明文顯示
還是**
這樣的顯示。
右側的按鈕可以切換明文、密文模式
UITextField明文\密文切換屬性的屬性
@property(nonatomic,getter=isSecureTextEntry) BOOL secureTextEntry; // default is NO
Q1:游標位置錯亂
一般來說密文的時候*號要比字母更寬,當密文切換成明文的時候游標的位置居然沒有變化,出現了這樣的情況。
這個問題在查了一些資料之後發現可能是蘋果自己的BUG,當然,對應方法是有的。我們可以在切換程式碼前將textfiled的enable設為NO,切換後在設定YES。當然,這回讓textfiled退出編輯模式。
如果你有更好的方式,歡迎交流,或者在博文後留言
self.tfPassword.enabled = NO;
self.tfPassword.secureTextEntry = !self.tfPassword.secureTextEntry;
self.tfPassword.enabled = YES;
Q2:游標位置錯亂
當UITextField經歷 明文->密文->明文
嗯,這確實是個頭疼的問題,也沒有任何理由,因為UITextField本身如此,而且當時真的想不到任何辦法。
最後終於解決。
思路是這樣的:我們都只到UITextField的代理UITextFieldDelegate中有方法- (BOOL)textField:(UITextField *)textField shouldChangeCharactersInRange:(NSRange)range replacementString:(NSString *)string;
相信每個人都會常用,通常我們用來抓使用者輸入的文字,在每次textfield發生字元改變的時候。
但是我們忽略了這個方法的本身作用,注意返回值,這個方法本身是用來返回『是否允許改變textfield字元』
。
所以只要在這裡做判斷:
- (BOOL)textField:(UITextField *)textField shouldChangeCharactersInRange:(NSRange)range replacementString:(NSString *)string {
//string就是此時輸入的那個字元
//得到輸入框的內容
NSString * toBeString = [textField.text stringByReplacingCharactersInRange:range withString:string];
if (textField == _tfPassword && textField.isSecureTextEntry ) {
textField.text = toBeString;
return NO;
}
return YES;
}
完美解決
程式碼
其他
其實很多奇怪的問題只有在實際開發的時候發現,這時候你就會認識到自己的經驗不足。所以啦,學無止境~。
過段時間妹子我會奉上自己的照片哦~(好久沒自拍啦~~)
有什麼問題都可以在博文後面留言,或者微博上私信我。
博主主要寫javaee和iOS的。
希望大家一起進步。
我的微博:小魚周凌宇