在做登录的时候,项目中有个需求,做个密码显示/隐藏功能,但是呢,苹果只给了一个API,那就secureTextEntry.但是设置了此属性后,只能隐藏密码,当把secureTextEntry属性设置为NO时,键盘变成了可切换,就会导致一个很尴尬的局面...密码框可以使用中文了...
此时我们需要做的就是,显示密码的时候,仍然使用安全键盘,不允许切换即可
如今使用私有方法就做到了,上代码:
首先导入运行时头文件
#import <objc/message.h>
然后,设置button的selected样式为眼睛睁开,在显示密码的时候,改变按钮的状态,根据状态切换一个私有属性即可
- (void)showOrHiddenPassword:(UIButton *)sender {
//此方法调用为了修复导航栏会导致的一个小问题,不使用也不影响
// [_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;
}
需要将文字替换的原因是,如果设置完属性不更新文字的话,文字还会保持当前状态