iphone - shouldChangeCharactersInRange 一次只取一位数字

标签 iphone ios

我试图在将价格和数量乘以文本字段后获得总值(value)。当数量为 10 或有任何两位或三位数字时,我没有得到值。这种方法一次只需要一个字符。

- (BOOL)textField:(UITextField *)textField shouldChangeCharactersInRange:(NSRange)range    
replacementString:(NSString *)string
{
if(textField == quantityText)
{
    NSCharacterSet *charactersToRemove =[[ NSCharacterSet alphanumericCharacterSet ]  
 invertedSet];
    NSRange inRange=[string rangeOfCharacterFromSet:charactersToRemove];
    if(inRange.location != NSNotFound)
    {
        quantityText.text =[ quantityText.text 
  stringByTrimmingCharactersInSet:charactersToRemove ];
        return NO;
    }
    if ([textField text] )
    {
        float quantity = [string floatValue];
        float price = [[priceLabel text] floatValue];
        float h = quantity * price;

        amountText.text=[NSString stringWithFormat:@"%f",h];

    } 
    else
    {
        return NO; 
    }
 }    
return YES;

  }

最佳答案

您只使用 replacementString 值进行计算,这是键入的最后一个字符,而不是整个字符串。

因此,如果我键入“1”,函数将使用 1 作为值,然后如果我键入“0”得到 10,您的函数将仅使用“0”作为值。

您需要获取 quantityText 文本字段的全部文本并使用它。您可以通过获取 textField.text 然后用 replacementString 替换指定的范围来获得它。

老实说,注册 UITextFieldTextDidChangeNotification 而不是使用 textfield:shouldChangeCharactersInRange:replacementString: 方法要容易得多。

参见 this answer了解详情。

关于iphone - shouldChangeCharactersInRange 一次只取一位数字,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9174280/

相关文章:

iphone - 获取核心数据对象的子对象的属性?

iphone - 在子类中附加更多 CTParagraphStyleSetting

ios - Storyboard "show"segue 在更新到 xcode7 后不起作用(仅在一种情况下)

ios - 红色录音条扭曲 View

ios - 如何根据屏幕尺寸快速调整元素大小

iphone - didFinishLaunchingWithOption 和 viewDidLoad 有什么区别

iphone - iphone如何判断当前年份是否闰年

iphone - 新浪微博未出现在iOS设置中

android - 如何在基于Xamarin.forms的webview中使用html5视频标签?

ios - 将 iPhone X 布局支持添加到旧的 Xcode 7/Swift 2 项目