【问题标题】:Stop UITextField Secure Text From Clearing Existing Text阻止 UITextField 安全文本清除现有文本
【发布时间】:2013-06-04 19:21:15
【问题描述】:

我有一个 UITextField,它是使用

声明的密码字段

passwordField.secureTextEntry = YES;

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

有没有办法防止这种情况发生或将其关闭?

-亨利

【问题讨论】:

    标签: ios passwords uitextfield


    【解决方案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,但不会重新加载其文本,因此在不清除文本的情况下,它会将键盘从字母更改为数字,反之亦然。您可以将其用于您自己的功能。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2012-01-21
        • 2020-05-06
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多