对于此任务,是否有比stringByReplacingOccurrencesOfString更好的东西?

时间:2012-07-31 04:27:08

标签: ios

我正在使用:

cleanedDataCellR2C2 =  [cleanedDataCellR2C2 stringByReplacingOccurrencesOfString:@"," withString:@""];

和一大堆类似的声明从文本字段中删除所有键盘字符,除了数字.... - (减号),+(加号),以及0,1,2,3 ,4,5,6,7,8和9个数字在文本字段中。上面的示例只是将NSString中的逗号转换为空值。

讨厌承认它,但是在一个项目中,我实际上使用了大约80个语句 - 除了上面显示的那些语句之外的每个键盘字符。你必须有一些更简单的方法。你有什么建议做这个工作?

2 个答案:

答案 0 :(得分:1)

答案 1 :(得分:1)

最好的解决方案是,如果可以的话,首先不要让他们输入非数字数据。你使用的是UITextField吗?如果没有,请忽略其余部分,但如果是这样的话:

首先,让您的视图控制器为UITextFieldDelegate,例如:

@interface MyViewController : UIViewController <UITextFieldDelegate>

然后在viewDidLoad

self.myTextField.delegate = self;

其次,添加shouldChangeCharacterInRange只允许所需的字符:

- (BOOL)textField:(UITextField *)textField shouldChangeCharactersInRange:(NSRange)range replacementString:(NSString *)string
{
    NSCharacterSet *nonNumeric = [[NSCharacterSet characterSetWithCharactersInString:@"+-0123456789"] invertedSet];

    if ([string rangeOfCharacterFromSet:nonNumeric].location == NSNotFound)
        return TRUE;
    else
        return FALSE;
}

第三,您可能希望将文本字段的键盘更改为仅用于数字数据,例如self.myTextField.keyboardType = UIKeyboardTypeNumbersAndPunctuationUIKeyboardTypeDecimalPad或类似内容。