当键盘处于活动状态时,如何在iPhone上隐藏文本字段光标

时间:2010-07-28 06:24:32

标签: iphone objective-c cocoa-touch uikit uitextfield

我们正在尝试进行密码设置,因此用户不应该看到光标。

4 个答案:

答案 0 :(得分:2)

答案 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,并进行了以下调整:

     
  1. 覆盖属性inputView和inputViewAccessory,以允许设置键盘视图在标签成为第一响应者时显示。
  2. 
    
        @interface PRLabel : UILabel     
    
        @property (strong, nonatomic, readwrite) UIView* inputView;
        @property (strong, nonatomic, readwrite) UIView* inputAccessoryView;
    
        @end
    
    
     
  3. 要使标签响应触摸事件,请覆盖方法isUserInteractionEnabled以始终返回YES。此外,覆盖touchesEnded方法,使标签成为检测到触摸时的第一响应者。
  4.  
  5. 覆盖方法canBecomeFirstResponder以始终返回YES。这将允许输入视图出现。
  6. 
        @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