适用于UITextfield的iOS 6和iOS 5中的退格功能,具有"安全"属性

foo*_*s27 2 iphone ipad ios ios5 ios6

我有一个UITextfield输入密码,SECURE启用了属性.

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

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

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

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

Tom*_*min 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
Run Code Online (Sandbox Code Playgroud)


小智 5

关于这种新行为,iOS 6也存在问题.试试这个:

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

中提琴!您的文本字段中没有任何内容.我可以使用iOS 6.0.x和6.1一致地重现这一点