我正在使用以下textfield delegate
来验证用户输入。
假设currentTotal
等于30.00
美元,并且只要用户输入的two times
等于或大于currentTotal
,我就会尝试发出提醒。
在我测试应用程序时,当用户输入63
美元时,不会发生任何警报,但只要用户输入630
美元,就会发出警报。
tip
和currentTotal
为double
。
我做错了什么,有什么建议吗?
- (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 = @"$ ";
}
答案 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];
}
}