1. 程式人生 > >iOS——密碼明文/密文切換問題

iOS——密碼明文/密文切換問題

前段時間根據產品經理的要求給我們輸入密碼的部分加了明文/密文切換,中間也遇到了一些頗有意思的問題。其中也有些很難查到資料。

在這裡記錄下來,也供大家參考,避免大家重複踩坑。

情景描述

明文/密文切換,就是輸入密碼的時候可以選擇明文顯示還是**這樣的顯示。

右側的按鈕可以切換明文、密文模式

UITextField明文\密文切換屬性的屬性

@property(nonatomic,getter=isSecureTextEntry) BOOL secureTextEntry;       // default is NO

Q1:游標位置錯亂

一般來說密文的時候*號要比字母更寬,當密文切換成明文的時候游標的位置居然沒有變化,出現了這樣的情況。
嗯 沒有用我們自己的app了,寫了個demo,樣式很簡約

這個問題在查了一些資料之後發現可能是蘋果自己的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的。

希望大家一起進步。

我的微博:小魚周凌宇

小魚周凌宇的微博