2

我有一个启用属性UITextfield的输入密码。SECURE

当用户UITextfield在输入一定数量的字符后在外面点击,然后再次点击回到UITextfield编辑时,会发生以下行为:

iOS 5.1 - 当我尝试从 中删除一个字符(使用backspace键盘)时UITextfield,最后一个字符被删除。

iOS 6.0 - 当我尝试从 中删除一个字符时UITextfield,所有键入的字符都将被删除。

我做错了什么,还是这是 iOS 6 中的错误?

4

4 回答 4

6

这是 iOS6 下的预期行为,您不应该更改它。

如果出于某种原因你真的需要这个,你可以覆盖UITextField的委托方法textField:shouldChangeCharactersInRange:replacementString:并恢复旧的行为:

#import "ViewController.h"

@interface ViewController () <UITextFieldDelegate>
@end

@implementation ViewController

- (void)viewDidLoad
{
    [super viewDidLoad];
    self.passwordField.delegate = self;
}

- (BOOL)textField:(UITextField *)textField shouldChangeCharactersInRange:(NSRange)range replacementString:(NSString *)string
{
    if (range.location > 0 && range.length == 1 && string.length == 0)
    {
        // iOS is trying to delete the entire string
        textField.text = [textField.text substringToIndex:textField.text.length - 1];
        return NO;
    }
    return YES;
}

@end
于 2013-01-19T11:04:05.517 回答
5

iOS 6 也有关于这种新行为的问题。试试这个:

  1. 导航到具有两个 UITextField 的视图,其中一个是安全的
  2. 在非安全文本字段中输入任何内容。
  3. 点击安全文本字段,不要输入或删除任何内容。回到非安全领域
  4. 按退格键一次

中提琴!现在,您的文本字段中没有任何内容。我能够与 iOS 6.0.x 和 6.1 一致地重现这一点

于 2013-02-05T18:42:51.510 回答
2

看起来这可以通过在 viewDidLoad 或附近将secureTextEntry 显式设置为NO 来解决。

- (void)viewDidLoad {
    [super viewDidLoad];

    self.textField.secureTextEntry = NO;
}

这似乎适用于 iOS 6 下的上述情况(带有电子邮件字段和安全密码字段的视图)。

于 2013-05-16T20:49:36.540 回答
0

这是一种检测安全字段是否将被退格键清除的方法:

iOS 6 UITextField Secure - 如何检测退格清除所有字符?

于 2013-05-28T03:16:39.697 回答