在输入uitextfield中的文本时或之后使用Backspace显示文本长度错误

时间:2013-10-21 13:04:40

标签: ios uitextfield

这里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”。 。 。 _ “”。 。 _ _

我的期望是当文本字段不包含任何字符时,我的标签会显示_ _ _ _

3 个答案:

答案 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中的当前文字以及rangereplacementString来获取实际结果文字(stringByReplacingCharactersInRange:withString:)。

请注意,这还可以让您处理将文本剪切并粘贴到字段中的用户。