这里l1,l2,l3,l4是UILabel
s。
-(BOOL)textField:(UITextField *)textField shouldChangeCharactersInRange:(NSRange)range replacementString:(NSString *)string
{
NSLog(@"%d",textField.text.length);
if (textField.text.length==0)
{
l1.text=@".";
l2.text=@"__";
l3.text=@"__";
l4.text=@"__";
}else if (textField.text.length==1)
{
l1.text=@".";
l2.text=@".";
l3.text=@"__";
l4.text=@"__";
}else if (textField.text.length==2)
{
l1.text=@".";
l2.text=@".";
l3.text=@".";
l4.text=@"__";
}else if (textField.text.length==3)
{
l1.text=@".";
l2.text=@".";
l3.text=@".";
l4.text=@".";
}
NSUInteger newLength = [textField.text length] + [string length] - range.length;
return (newLength > 4) ? NO : YES;
}
此处输出如下......
textfield是1234然后是标签。 。 。 。
它运行正常但是当用户从文本字段中删除字符时,我得到以下结果:
“123”。 。 。 。 “12”。 。 。 。 “1”。 。 。 _ “”。 。 _ _
我的期望是当文本字段不包含任何字符时,我的标签会显示_ _ _ _
答案 0 :(得分:1)
您想要从编辑该字段的用户处查看结果的文字。为此,请创建一个新字符串:
-(BOOL)textField:(UITextField *)textField shouldChangeCharactersInRange:(NSRange)range replacementString:(NSString *)string
{
NSString *editedText = [textField.text stringByReplacingCharactersInRange:range withString:string];
NSLog(@"%d",editedText.length);
if (editedText.length==0)
{
l1.text=@"__";
l2.text=@"__";
l3.text=@"__";
l4.text=@"__";
}
else if (editedText.length==1)
{
l1.text=@".";
l2.text=@"__";
l3.text=@"__";
l4.text=@"__";
}else if (editedText.length==2)
{
l1.text=@".";
l2.text=@".";
l3.text=@"__";
l4.text=@"__";
}else if (editedText.length==3)
{
l1.text=@".";
l2.text=@".";
l3.text=@".";
l4.text=@"__";
}else if (editedText.length==4)
{
l1.text=@".";
l2.text=@".";
l3.text=@".";
l4.text=@".";
}
return (editedText.length > 4) ? NO : YES;
}
答案 1 :(得分:0)
如果返回YES,UITextField
在该函数结束之前不会更新它的文本。您假设textField.text已更新,以反映您在该函数之前所点击的内容。您需要做的是测试string
参数,看看它是否是backspace
字符代码。如果是,那么你应该测试textField.text.length - 1。
- (BOOL)textField:(UITextField *)textField shouldChangeCharactersInRange:(NSRange)range replacementString:(NSString *)string {
NSInteger offSet = 0;
if ( [string isEqualToString:@""] ) {
offset = 1;
}
if ( textField.text.length - offSet == value ) {
}
BOOL shouldChangeCharacters = YES;
return shouldChangeCharacters;
}
答案 2 :(得分:0)
在批准和操作编辑后,您应将if
语句基于文本字段中的实际文本。通过使用if (textField.text.length==0)
,您假设您从零开始并添加一个字符以获取文本字段中的单个字符 - 这不是一个有效的假设。
使用textField
中的当前文字以及range
和replacementString
来获取实际结果文字(stringByReplacingCharactersInRange:withString:
)。
请注意,这还可以让您处理将文本剪切并粘贴到字段中的用户。