7

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

长版:我有三个循环的 UITextField(使用返回键并在“shouldReturn”方法中捕捉到按下。UITextField 中已经有文本,如果用户没有输入任何内容而只是转到下一个 UITextField ,该值应保持不变(默认行为)。

但我希望如果用户开始输入,它会首先自动清除文本。像突出显示整个字段,然后键入任何内容会删除字段,然后添加用户按键。

“编辑开始时清除”并不好,因为文本会在出现在字段中的光标处立即清除。这是不希望的。我以为我可以在这里使用占位符,但这不能作为默认值,而且我找不到默认值属性。Highlighted 和 Selected 属性在这方面也不做任何事情。

4

7 回答 7

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]; 
}
于 2012-11-16T13:31:33.943 回答
2

在文件中声明一个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;
  }
}
于 2012-11-16T13:36:27.403 回答
2

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

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

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

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

于 2012-11-26T13:28:13.040 回答
1

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

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

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

这是您可以从情节提要或以编程方式设置的内容。(是的,我花了两个小时试图以更难的方式解决它。当解决方案实际上是代码的一行更改时)。

于 2013-03-08T14:38:00.500 回答
1

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

于 2013-08-27T01:28:44.627 回答
0

尝试使用以下方法。

- (BOOL) textField: (UITextField *)theTextField shouldChangeCharactersInRange: (NSRange)range replacementString: (NSString *)string {  
  if(isFirsttime==YES)
{
textfield.text==@"";
isFirsttime=NO;
}
return YES;
     }
于 2012-11-16T13:30:27.777 回答
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;
    }
}
于 2015-03-18T11:04:29.017 回答