简短版:如何让UITextField框删除用户首次按键上的所有内容?在用户开始输入内容之前,我不希望删除信息。即,在开始编辑时清除它是不够的。
长版本:我有三个循环的UITextField(使用返回键并在“shouldReturn”方法中捕获按下.UITextField中已有文本,如果用户没有' t键入任何东西,然后转到下一个UITextField,值应该保留(默认行为)。
但我希望如果用户开始输入,它会自动清除文本。类似于整个字段突出显示,然后键入任何东西删除fiels然后添加用户按键。
“编辑开始时清除”并不好,因为文本会立即在字段中出现的光标上清除。那是不可取的。我以为我可以在这里使用占位符,但这不能作为默认值,我找不到默认值属性。突出显示和选定属性在这方面也没有做任何事情。
答案 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;
}
}