在用户开始键入时清除UITextField

时间:2012-11-16 13:22:37

标签: ios default textfield clear

简短版:如何让UITextField框删除用户首次按键上的所有内容?在用户开始输入内容之前,我不希望删除信息。即,在开始编辑时清除它是不够的。

长版本:我有三个循环的UITextField(使用返回键并在“shouldReturn”方法中捕获按下.UITextField中已有文本,如果用户没有' t键入任何东西,然后转到下一个UITextField,值应该保留(默认行为)。

但我希望如果用户开始输入,它会自动清除文本。类似于整个字段突出显示,然后键入任何东西删除fiels然后添加用户按键。

“编辑开始时清除”并不好,因为文本会立即在字段中出现的光标上清除。那是不可取的。我以为我可以在这里使用占位符,但这不能作为默认值,我找不到默认值属性。突出显示和选定属性在这方面也没有做任何事情。

7 个答案:

答案 0 :(得分:2)

有一个名为

的委托方法
textFieldDidBeginEditing:(UITextField*) tf{
  tf.startedEdinting = YES;
}

textFeildDidEndEditing: (UITextField*) tf {
  tf.startedEditing = NO;
}

将类别中的startEditing添加到UITextField。

然后,如果值更改清除字段:

- (BOOL)textField:(UITextField *)textField shouldChangeCharactersInRange:(NSRange)range replacementString:(NSString *)string {
 if (textField.startEditing){
  textField.text = string;
 } else {
  textField.text = [textField.text stringByReplacingCharactersInRange:range withString:string];
 }
}

您可以通过以下方式将属性添加到UITextField类别:

·H

@property (nonatomic, assign) BOOL startEditing;

的.m

@dynamic startEditing;

- (void) setStartEditing:(BOOL)startEditing_in{ 
NSNumber* num = [NSNumber numberWithBool:startEditing_in]; 
objc_setAssociatedObject(self, myConstant, num, OBJC_ASSOCIATION_RETAIN_NONATOMIC); 
} 
- (BOOL) startEditing{ 
NSNumber* num = objc_getAssociatedObject(self, myConstant); 
return [num boolValue]; 
}

答案 1 :(得分:1)

BOOL文件中声明.h变量,例如。

BOOL clearField;

并实现委托方法,如:

-(void)textFieldDidBeginEditing:(UITextField *)textField
{
   clearField = YES;
}

-(void)textFieldDidEndEditing:(UITextField *)textField
{
  clearField = NO;
}

-(BOOL)textFieldShouldReturn:(UITextField *)textField
{
  clearField = NO;
}

- (BOOL)textField:(UITextField *)textField shouldChangeCharactersInRange:(NSRange)range replacementString:(NSString *)string
{
  if(clearField)
  {
     textField.text = @""
     clearField = NO;
  }
}

答案 2 :(得分:1)

我想感谢人们的回答,我实施了这里描述的两种主要方法,并且都完美无缺。但是我已经遇到了一个更简单,更好的答案,只涉及一行代码:)

在textField的didBeginEditing方法中,放置[self.textField selectAll:self];[self.textField selectAll:nil];

我找到的原始答案有selectAll:self,但这会显示剪切/复制/粘贴菜单。如果您发送nil而不是self,则菜单不会显示。

添加这一行代码会突出显示输入textField时的文本(因此会为用户提供可视提示),并且只有在按下某个键时才会删除所有内容。

答案 3 :(得分:1)

另一个实现相同目的的解决方案是简单地使用文本字段placeholder,其定义为:

The string that is displayed when there is no other text in the text field.

因此,只要用户开始输入,占位符文本就会消失。

您可以从故事板或programmatically设置。 (是的,我花了两个小时试图找到更难的方式......当解决方案实际上是代码的一行更改时)。

答案 4 :(得分:1)

如果要清除用户与之交互的文本,则在界面构建器中有一个选项,您可以在其中将文本字段设置为“编辑开始时清除。”

答案 5 :(得分:0)

尝试使用以下方法。

- (BOOL) textField: (UITextField *)theTextField shouldChangeCharactersInRange: (NSRange)range replacementString: (NSString *)string {  
  if(isFirsttime==YES)
{
textfield.text==@"";
isFirsttime=NO;
}
return YES;
     }

答案 6 :(得分:0)

为textField的初始文本声明并初始化NSString变量

NSString *initialText=@"initial text";

然后实现方法:

    -(void)textFieldDidBeginEditing:(UITextField *)textField
 {
    if(textField.text isEqualToString:initialText)
         { 
           textField.text=@"";
        }
   }

-(void)textFieldDidEndEditing:(UITextField *)textField
{
    if(textField.text isEqualToString:@"")
    {
        textField.text=initialText;
    }
}