shouldChangeCharactersInRange表现得很奇怪

时间:2017-07-25 04:31:15

标签: ios objective-c uitextfield

我正在使用以下textfield delegate来验证用户输入。

假设currentTotal等于30.00美元,并且只要用户输入的two times等于或大于currentTotal,我就会尝试发出提醒。

在我测试应用程序时,当用户输入63美元时,不会发生任何警报,但只要用户输入630美元,就会发出警报。

tipcurrentTotaldouble

我做错了什么,有什么建议吗?

- (BOOL)textField:(UITextField *)aTextField shouldChangeCharactersInRange:(NSRange)range replacementString:(NSString *)string
{    
    if ([aTextField.text containsString:@"$"])
    {
        tip = [[aTextField.text stringByReplacingOccurrencesOfString:@"$" withString:@""] doubleValue];
    }
    else
    {
        tip = [aTextField.text doubleValue];
    }

    if(tip > currentTotal *2)
    {
      [self presentViewController:[AppConstant oneButtonDisplayAlert:@"Error" withMessage:@"Please enter valid tip"] animated:YES completion:nil];
    }

    return YES;
}

- (void)textFieldDidBeginEditing:(UITextField *)textField {
    self.tipTF.text = @"$ ";
}

2 个答案:

答案 0 :(得分:3)

您使用的方法是-textView:shouldChangeCharactersInRange:replacement表示操作已完成,但尚未完成。因此,从文本字段中获取值,您将获得旧值。

如果您想知道新值,您必须自己替换方法中的替换(复制字符串值)。

NSString *newValue = [aTextField.text stringByReplacingCharactersInRange:range withString:string];
double tip = [newValue doubleValue]; // Where does your var tip comes from?

答案 1 :(得分:1)

-(BOOL)textField:(UITextField *)textField shouldChangeCharactersInRange:(NSRange)range replacementString:(NSString *)string
{
    if (textField == self.tipTF)
    {
        if (self.tipTF.text && self.tipTF.text.length > 0) {
            [textField addTarget:self action:@selector(textFieldDidChange:) forControlEvents:UIControlEventEditingChanged];
        }
    }
    return YES;
}

-(void)textFieldDidChange :(UITextField *)theTextField{
    NSLog( @"text changed: %@", theTextField.text);
    double tip;
    if ([theTextField.text containsString:@"$"])
    {
        tip = [[theTextField.text stringByReplacingOccurrencesOfString:@"$" withString:@""] doubleValue];
    }else {
        tip = [theTextField.text doubleValue];
    }

    if (tip > currentTotal *2) {
        [self presentViewController:[AppConstant oneButtonDisplayAlert:@"Error" withMessage:@"Please enter valid tip"] animated:YES completion:nil];
    }

}