Objective-C中如何切换密码输入显示状态且不清除已输入文本?
密码显隐切换文本清空问题解决方案
这是UITextField的系统默认安全机制,切换secureTextEntry属性时会自动清空已输入内容,只需在现有按钮动作逻辑中增加文本与光标暂存恢复逻辑即可解决,无需额外独立函数,修改后代码如下:
- (IBAction)showHidePassword:(id)sender { // 暂存当前输入内容与光标选中范围 NSString *originalText = self.passTextField.text; UITextRange *selectedRange = self.passTextField.selectedTextRange; // 切换密文显示状态 self.passTextField.secureTextEntry = !self.passTextField.secureTextEntry; // 恢复输入内容与光标位置 self.passTextField.text = originalText; self.passTextField.selectedTextRange = selectedRange; // 切换按钮图标 UIImage *btnImage = self.passTextField.secureTextEntry ? [UIImage systemImageNamed:@"eye"] : [UIImage systemImageNamed:@"eye.fill"]; [self.toggleBTN setImage:btnImage forState:UIControlStateNormal]; }
如果不需要使用原生secureTextEntry属性,也可通过UITextField代理方法手动将输入字符替换为圆点实现密文效果,但该方案需要额外处理删除逻辑、光标定位、剪切板安全等问题,安全性和开发成本都不如原生属性适配方案,更推荐使用上述修改方案。
内容的提问来源于stack exchange,提问作者Jas Har
相关产品推荐
相关产品推荐

