我们正在尝试进行密码设置,因此用户不应该看到光标。
答案 0 :(得分:2)
尝试将the field's secureTextEntry
property设为YES
。
答案 1 :(得分:1)
编辑来回答这个问题,通过将UITextField
与另一个UITextField
重叠来隐藏光标最简单,其中后一个实际上是第一个响应者,前面的一个用于至少获得焦点(使用-(void)textFieldDidBeginEditing:(UITextField *)textField
,并将焦点放在上面)。在
-(BOOL)textField:(UITextField *)textField shouldChangeCharactersInRange:(NSRange)range
replacementString:(NSString *)string
使用
之类的内容准确地在前面UITextField
上应用替换
front.text = [front.text stringByReplacingCharactersInRange:range withString:string];
您可能会以这种方式破坏复制和粘贴功能。另外,要非常小心你在这些委托函数中做了什么。期待意外。
我的原始答案,同样适用:
我不知道在这种情况下“高级安全性”是什么意思,但看看
change the secure password character in uitextfield
为了破坏用户体验,并且可能添加更多“安全性”,您可以:
NO
[string length] == 0
,则停用退格功能
1+(arc4rand()%4)
个字符(如某些窗口系统所示)但我必须说我真的没有看到这一切。
答案 2 :(得分:0)
您可以使用隐藏的虚拟文本字段,并使用委托textDidChage进行TextField,并使用此值填充实际密码字段中的屏蔽值。
在Interface Builder中有一个隐藏的虚拟文本字段,为该说明保留一个IBOutlet
IBOutlet UITextField * passwordField; IBOutlet UItextField * dummyField;
还为此设置委托并编写以下委托方法
- (BOOL)textField:(UITextField *)textField shouldChangeCharactersInRange:(NSRange)range replacementString:(NSString *)string{
NSString *dummyText = dummyField.text;
NSString *changedText = @"";
if(dummyField == textField)
{
if([string length] == 0)
{
if([dummyText length] <= 1)
{
changedText = @"";
}
else
{
changedText = [NSString stringWithFormat:@"%@",[dummyText substringToIndex:[dummyText length] - 1]];
}
}
else
{
changedText = [NSString stringWithFormat:@"%@%@",dummyText,string];
}
passwordField.text = changedText;
}
return YES; }
- (BOOL)textFieldShouldBeginEditing:(UITextField *)textField{
if(passwordField == textField)
{
[dummyField becomeFirstResponder];
return NO;
}
return YES; }
- (BOOL)textFieldShouldReturn:(UITextField *)textField {
[textField resignFirstResponder];
return YES; }
答案 3 :(得分:0)
我也有这个问题。我使用了所描述的解决方案 here
它使用自定义UILabel替换UITextField,并进行了以下调整:
@interface PRLabel : UILabel
@property (strong, nonatomic, readwrite) UIView* inputView;
@property (strong, nonatomic, readwrite) UIView* inputAccessoryView;
@end
@implementation PRLabel
-(id)initWithFrame:(CGRect)frame
{
self = [super initWithFrame:frame];
if (self) {
// Initialization code
}
return self;
}
-(BOOL)isUserInteractionEnabled
{
return YES;
}
-(BOOL)canBecomeFirstResponder
{
return YES;
}
-(void)touchesEnded:(NSSet *)touches withEvent:(UIEvent *)event
{
[self becomeFirstResponder];
}
@end
醇>