iOS - 保存时最后一个字符消失

时间:2016-11-29 09:02:17

标签: ios objective-c uitextfield

我正在实现以下方法来保存文本字段的数据,以防更改为_detailsDictionary,但是当它保存时,在textfield.text中输入的最后一个字母不会出现,例如,如果我是保存Krish,然后只保存kris。如何解决这些问题?

-(BOOL)textField:(UITextField *)textField shouldChangeCharactersInRange:(NSRange)range replacementString:(NSString *)string
{
    NSInteger field = textField.tag;

    if(field ==1)
    {

        if(textField.text ==[_detailsDictionary valueForKey:@"FName"])
        {
            NSLog(@"cell1.userDetailTextField.text %@",textField.text);
        }
        else
        {
            [_detailsDictionary setObject:textField.text forKey:@"FName"];
        }
        return YES;
            }
    if(field ==2)
    {


        if(textField.text ==[_detailsDictionary valueForKey:@"MName"])
        {
            NSLog(@"cell1.userDetailTextField.text %@",textField.text);
        }
        else
        {
            [_detailsDictionary setObject:textField.text forKey:@"MName"];
        }

         return YES;
    }

    if(field ==3)
    {
        if(textField.text ==[_detailsDictionary valueForKey:@"LName"])
        {
            NSLog(@"cell1.userDetailTextField.text %@",textField.text);
        }
        else
        {
            [_detailsDictionary setObject:textField.text forKey:@"LName"];
        }
         return YES;
    }

    if(field ==4)
    {
        if(textField.text ==[_detailsDictionary valueForKey:@"City"])
        {
            NSLog(@"cell1.userDetailTextField.text %@",textField.text);
        }
        else
        {
            [_detailsDictionary setObject:textField.text forKey:@"City"];
        }
         return YES;
    }

    if(field ==5)
    {
        if(textField.text ==[_detailsDictionary valueForKey:@"State"])
        {
            NSLog(@"cell1.userDetailTextField.text %@",textField.text);
        }
        else
        {
            [_detailsDictionary setObject:textField.text forKey:@"State"];
     }
         return YES;
    }

    if(field ==6)
    {
        if(textField.text ==[_detailsDictionary valueForKey:@"Country"])
        {
            NSLog(@"cell1.userDetailTextField.text %@",textField.text);
        }
        else
        {
            [_detailsDictionary setObject:textField.text forKey:@"Country"];
        }
         return YES;
    }

    if(field ==7)
    {

        if(textField.text ==[_detailsDictionary valueForKey:@"DOB"])
        {
            NSLog(@"cell1.userDetailTextField.text %@",textField.text);
        }
        else
        {
            [_detailsDictionary setObject:textField.text forKey:@"DOB"];
        }
         return YES;
    }
    return NO;
}

5 个答案:

答案 0 :(得分:1)

已知-(BOOL)textField:(UITextField *)textField shouldChangeCharactersInRange:(NSRange)range replacementString:(NSString *)string函数用于在写入的字符附加到实际字符串之前对textfield进行更改。 因此,当您尝试从此函数中的textfield获取文本时,最后一个字符尚未添加到字符串中。

因此,不要使用此功能,请使用此- (void)textFieldDidEndEditing:(UITextField *)textField

答案 1 :(得分:1)

shouldChangeCharactersInRange方法中,您无法获得textfield.text的全文,因为在文本实际输入textfield之前调用此方法

您需要使用

NSString *strText = [textField.text stringByReplacingCharactersInRange:range withString:string];

此处strText您将获得fullText

答案 2 :(得分:0)

我在这里使用rajat的答案,但没有更多细节。 首先,你需要全文:

NSString *strText = [textField.text stringByReplacingCharactersInRange:range withString:string];

然后您必须将strText添加到词典而不是textField.text

答案 3 :(得分:0)

如果要将数据存储在shouldChangeCharactersInRange mathod。

中,则需要尝试此操作
NSString *fname = [textField.text stringByReplacingCharactersInRange:range withString:string];
[_detailsDictionary setObject:fname forKey:@"FName"];

希望它会对你有所帮助。

答案 4 :(得分:0)

改为使用

-(void) textFieldDidEndEditing:(UITextField *)textField
{
    NSInteger field = textField.tag;

    if(field ==1)
    {

        if(textField.text ==[_detailsDictionary valueForKey:@"FName"])
        {
            NSLog(@"cell1.userDetailTextField.text %@",textField.text);
        }
        else
        {
            [_detailsDictionary setObject:textField.text forKey:@"FName"];
        }

            }
    if(field ==2)
    {


        if(textField.text ==[_detailsDictionary valueForKey:@"MName"])
        {
            NSLog(@"cell1.userDetailTextField.text %@",textField.text);
        }
        else
        {
            [_detailsDictionary setObject:textField.text forKey:@"MName"];
        }


    }

    if(field ==3)
    {
        if(textField.text ==[_detailsDictionary valueForKey:@"LName"])
        {
            NSLog(@"cell1.userDetailTextField.text %@",textField.text);
        }
        else
        {
            [_detailsDictionary setObject:textField.text forKey:@"LName"];
        }

    }

    if(field ==4)
    {
        if(textField.text ==[_detailsDictionary valueForKey:@"City"])
        {
            NSLog(@"cell1.userDetailTextField.text %@",textField.text);
        }
        else
        {
            [_detailsDictionary setObject:textField.text forKey:@"City"];
        }

    }

    if(field ==5)
    {
        if(textField.text ==[_detailsDictionary valueForKey:@"State"])
        {
            NSLog(@"cell1.userDetailTextField.text %@",textField.text);
        }
        else
        {
            [_detailsDictionary setObject:textField.text forKey:@"State"];
     }

    }

    if(field ==6)
    {
        if(textField.text ==[_detailsDictionary valueForKey:@"Country"])
        {
            NSLog(@"cell1.userDetailTextField.text %@",textField.text);
        }
        else
        {
            [_detailsDictionary setObject:textField.text forKey:@"Country"];
        }

    }

    if(field ==7)
    {

        if(textField.text ==[_detailsDictionary valueForKey:@"DOB"])
        {
            NSLog(@"cell1.userDetailTextField.text %@",textField.text);
        }
        else
        {
            [_detailsDictionary setObject:textField.text forKey:@"DOB"];
        }

    }

}