阻止 UITextField 安全文本清除现有文本
Posted
技术标签:
【中文标题】阻止 UITextField 安全文本清除现有文本【英文标题】:Stop UITextField Secure Text From Clearing Existing Text 【发布时间】:2013-06-04 19:21:15 【问题描述】:我有一个 UITextField,它是使用
声明的密码字段passwordField.secureTextEntry = YES;
我的问题是,当我输入一半密码时,单击另一个组件,然后返回密码字段并再次开始输入,ios 会清除现有文本。
有没有办法防止这种情况发生或将其关闭?
-亨利
【问题讨论】:
【参考方案1】:执行此操作的最简单方法是使用类似于此的代码为 UITextField 实现委托:
- (BOOL)textField:(UITextField *)textField shouldChangeCharactersInRange:(NSRange)range replacementString:(NSString *)replacementString
if (textField.text)
textField.text = [textField.text stringByReplacingCharactersInRange:range withString:replacementString];
else
textField.text = replacementString;
return NO;
【讨论】:
【参考方案2】:默认情况下,不,您不能对安全文本字段执行此操作。不过你可以解决它。
实现委托方法textField:shouldChangeCharactersInRange:replacementString:
并使用传递的值来决定做什么。
即如果范围是整个字符串并且替换是空字符串,则不允许更改。新文本可能作为新键入的字符提供,您需要检查该方法实际接收的参数。
【讨论】:
只是出于好奇,您是否尝试过此解决方案,因为我刚刚遇到了类似的问题(显示/隐藏密码),而我的问题是当用户切换显示/隐藏按钮并且 textField 再次返回为secureTextEntry 光标位于字符串的末尾,但是如果输入了一个字符,则删除了前一个字符串,并且仅“保存”了新文本,最后我以编程方式将光标重新定位在 textField 的末尾,这样做了把戏。 @danypata 不,我实际上并没有尝试过,所以它可能需要一些调整,因为我不能确定替换将提供一个空字符串或新键入的字符。我会用这个更新答案。我实际上并没有尝试阻止安全文本字段的标准功能。 这个答案有误导性,UITextField被清除时的范围不是整个字符串,范围仍然是一个。【参考方案3】:当我更改键盘类型以使我的密码组合为 4(digits)+1(alpha) 以停止清除 secureTextEntry
时,我遇到了同样的情况,
- (BOOL)textField:(UITextField *)textField shouldChangeCharactersInRange:(NSRange)range replacementString:(NSString *)string
textField.keyboardType = UIKeyboardTypePhonePad;
[textField reloadInputViews];
return YES;
它会重新加载UITextField
,但不会重新加载其文本,因此在不清除文本的情况下,它会将键盘从字母更改为数字,反之亦然。您可以将其用于您自己的功能。
【讨论】:
以上是关于阻止 UITextField 安全文本清除现有文本的主要内容,如果未能解决你的问题,请参考以下文章
清除 UITextField 的 text 属性的内容以供点击
UITextField 清除故障 - 文本突出显示,选择插入符号出现