0

这里 l1,l2,l3,l4 是UILabels。

-(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;

}

这里的输出如下...

文本字段是 1234 然后标签是 . . . .

它工作正常,但是当用户从文本字段中删除字符时,我得到以下结果:

“123”。. . . “12”。. . . “1”。. . _“”。. _ _

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

4

3 回答 3

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;

}
于 2013-10-21T13:24:22.613 回答
0

您的if陈述应基于编辑被批准并采取行动后文本字段中的实际文本。通过使用if (textField.text.length==0),您假设您从零开始并添加一个字符以获取文本字段中的单个字符 - 这不是一个有效的假设。

将 中的当前文本与和textField一起使用以获取实际结果文本 ( )。rangereplacementStringstringByReplacingCharactersInRange:withString:

请注意,这还允许您处理用户将文本剪切和粘贴到字段中。

于 2013-10-21T13:18:28.857 回答
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;
}
于 2013-10-21T13:16:11.563 回答