Ios 停止UITextField安全文本清除现有文本

Ios 停止UITextField安全文本清除现有文本,ios,passwords,uitextfield,Ios,Passwords,Uitextfield,我有一个UITextField,它是通过使用声明的密码字段 passwordField.secureTextEntry=YES 我的问题是,当我键入一半密码,单击另一个组件,然后返回到passwordField并再次开始键入时,iOS会清除现有文本 有没有办法防止这种情况发生或关闭它 -Henry默认情况下,不,您不能为安全文本字段执行此操作。不过你可以解决这个问题 实现委托方法textField:shouldChangeCharactersRange:replacementString:,并使

我有一个UITextField,它是通过使用声明的密码字段

passwordField.secureTextEntry=YES

我的问题是,当我键入一半密码,单击另一个组件,然后返回到passwordField并再次开始键入时,iOS会清除现有文本

有没有办法防止这种情况发生或关闭它


-Henry

默认情况下,不,您不能为安全文本字段执行此操作。不过你可以解决这个问题

实现委托方法
textField:shouldChangeCharactersRange:replacementString:
,并使用传递的值决定要执行的操作


i、 e.如果范围是整个字符串,替换为空字符串,则不允许更改。新文本可能作为新键入的字符提供,您需要检查该方法实际接收的参数。

默认情况下,不,您不能对安全文本字段执行此操作。不过你可以解决这个问题

实现委托方法
textField:shouldChangeCharactersRange:replacementString:
,并使用传递的值决定要执行的操作


i、 e.如果范围是整个字符串,替换为空字符串,则不允许更改。新文本可能作为新键入的字符提供,您需要检查该方法实际接收的参数。

最简单的方法是使用类似以下代码实现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;
}

最简单的方法是使用类似以下代码实现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;
}

当我改变键盘类型,使我的密码组合为4(数字)+1(字母),停止清除
secureTextEntry
,我也遇到了同样的情况

- (BOOL)textField:(UITextField *)textField shouldChangeCharactersInRange:(NSRange)range replacementString:(NSString *)string {
textField.keyboardType = UIKeyboardTypePhonePad;
[textField reloadInputViews];

return YES;
}

它重新加载
UITextField
,但不加载文本,因此在不清除文本的情况下,它将键盘从字母改为数字,反之亦然。您可以将其用于您自己的功能。

当我更改键盘类型以使我的密码组合为4(数字)+1(字母),停止清除
secureTextEntry
<

- (BOOL)textField:(UITextField *)textField shouldChangeCharactersInRange:(NSRange)range replacementString:(NSString *)string {
textField.keyboardType = UIKeyboardTypePhonePad;
[textField reloadInputViews];

return YES;
}

它重新加载
UITextField
,但不加载文本,因此在不清除文本的情况下,它将键盘从字母改为数字,反之亦然。您可以将其用于自己的功能。

出于好奇,您是否尝试了此解决方案,因为我刚刚遇到了类似的问题(显示/隐藏密码)我的问题是,当用户切换“显示/隐藏”按钮,文本字段再次返回为secureTextEntry时,光标位于字符串的末尾,但如果键入了一个字符,则会删除上一个字符串,只“保存”新文本最后,我以编程方式将光标重新放置在文本字段的末尾,这就成功了。@danypata不,我实际上没有尝试过,因此可能需要进行一些调整,因为我不能确定替换将提供空字符串或新键入的字符。我会用这个更新答案。实际上,我还没有尝试阻止安全文本字段的标准功能。这个答案有误导性,清除UITextField时的范围不是整个字符串,范围仍然是一个。出于好奇,您是否尝试过此解决方案,因为我刚刚遇到了类似的问题(显示/隐藏密码)我的问题是,当用户切换“显示/隐藏”按钮,文本字段再次返回为secureTextEntry时,光标位于字符串的末尾,但如果键入了一个字符,则会删除上一个字符串,只“保存”新文本最后,我以编程方式将光标重新放置在文本字段的末尾,这就成功了。@danypata不,我实际上没有尝试过,因此可能需要进行一些调整,因为我不能确定替换将提供空字符串或新键入的字符。我会用这个更新答案。实际上,我还没有尝试阻止安全文本字段的标准功能。这个答案有误导性,清除UITextField时的范围不是整个字符串,范围仍然是一个。