在做登錄的時候,項目中有個需求,做個密碼顯示/隱藏功能,但是呢,蘋果只給了一個API,那就secureTextEntry.但是設置了此屬性后,只能隱藏密碼,當把secureTextEntry屬性設置為NO時,鍵盤變成了可切換,就會導致一個很尷尬的局面...密碼框可以使用中文了...
此時我們需要做的就是,顯示密碼的時候,仍然使用安全鍵盤,不允許切換即可
如今使用私有方法就做到了,上代碼:
首先導入運行時頭文件
#import <objc/message.h>
然后,設置button的selected樣式為眼睛睜開,在顯示密碼的時候,改變按鈕的狀態(tài),根據(jù)狀態(tài)切換一個私有屬性即可
- (void)showOrHiddenPassword:(UIButton *)sender {
//此方法調(diào)用為了修復導航欄會導致的一個小問題,不使用也不影響
// ? ? ? ? [_passwordTextField resignFirstResponder];
? ? ? ? ?((void(*)(id,SEL,BOOL))objc_msgSend)(_passwordTextField,NSSelectorFromString(@"setDisplaySecureTextUsingPlainText:"),!sender.isSelected);
? ? ? ? ? NSString* text = _passwordTextField.text;
? ? ? ? ?_passwordTextField.text = @"";
? ? ? ? ? ?_passwordTextField.text = text;
? ? ? ? ? ? sender.selected = !sender.isSelected;
}
需要將文字替換的原因是,如果設置完屬性不更新文字的話,文字還會保持當前狀態(tài)