ios - shouldChangeCharactersInRange 行为异常

标签 ios objective-c uitextfield

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

假设 currentTotal 等于 30.00 美元,每当用户输入 两次 等于或大于 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 = @"$ ";
}

最佳答案

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

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

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

关于ios - shouldChangeCharactersInRange 行为异常,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45293977/

相关文章:

ios - UITextView中的不同颜色

ios - SVC 网络服务——objective-c

ios - 如何重新激活两个 physicsBody 之间的联系

iphone - 将名称和电子邮件存储在数组列表中时,创建具有电子邮件和名称属性的对象播放器是可行的方法吗?

ios - 如何快速为整个应用程序的 UITextField 设置全局占位符颜色?

objective-c - 按下 UIButton 时调用 UITextField 的 textFieldDidEndEditing

ios - 如何获取 UITableViews 中 UITextField 的所有字符串值

ios - 来自 URL 的 UIImage(谷歌地图)

ios - 从服务器流式传输 .caf 音频文件

iphone - iOS:将大型 XIB 重构为几个较小的 XIB 文件以提高速度