我有一个启用属性UITextfield
的输入密码。SECURE
当用户UITextfield
在输入一定数量的字符后在外面点击,然后再次点击回到UITextfield
编辑时,会发生以下行为:
iOS 5.1 - 当我尝试从 中删除一个字符(使用backspace
键盘)时UITextfield
,最后一个字符被删除。
iOS 6.0 - 当我尝试从 中删除一个字符时UITextfield
,所有键入的字符都将被删除。
我做错了什么,还是这是 iOS 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
iOS 6 也有关于这种新行为的问题。试试这个:
中提琴!现在,您的文本字段中没有任何内容。我能够与 iOS 6.0.x 和 6.1 一致地重现这一点
看起来这可以通过在 viewDidLoad 或附近将secureTextEntry 显式设置为NO 来解决。
- (void)viewDidLoad {
[super viewDidLoad];
self.textField.secureTextEntry = NO;
}
这似乎适用于 iOS 6 下的上述情况(带有电子邮件字段和安全密码字段的视图)。
!
这是一种检测安全字段是否将被退格键清除的方法: