如何过滤复制粘贴字符串目标c

时间:2016-09-27 10:09:17

标签: ios objective-c iphone xcode uitextfield

有没有办法将复制的文字/字符串过滤到UITextField? 我已经尝试使用UITextField方法shouldChangeCharactersInRange,但它只会在我们输入时进行过滤,但是当我们粘贴它时,它仍然无法过滤。我希望UITextField只能输入字母数字,但它仍然可以通过复制粘贴输入其他字符。

这是我的一段代码

- (BOOL)textField:(UITextField *)textField shouldChangeCharactersInRange:(NSRange)range replacementString:(NSString *)string  {
if (textField == _nameField) {
NSCharacterSet *cs = [[NSCharacterSet characterSetWithCharactersInString:NAME_CHARACTERS] invertedSet];
NSString *filtered = [[string componentsSeparatedByCharactersInSet:cs] componentsJoinedByString:@""];
return [string isEqualToString:filtered];
}

提前致谢。

2 个答案:

答案 0 :(得分:0)

即使用户粘贴到字段中,也会调用

shouldChangeCharactersInRange

如果您正在努力在该功能中做您需要的事情,那么很容易做到这一点:

- (BOOL)textField:(UITextField *)shouldChangeCharactersInRange:(NSRange)range replacementString:(NSString *)string {

    dispatch_after(dispatch_time(DISPATCH_TIME_NOW, (int64_t)(0.01 * NSEC_PER_SEC)), dispatch_get_main_queue(), ^{
        [self textFieldDidUpdate:textField];
    });

    return YES;
}

- (void)textFieldDidUpdate:(UITextField *)textField {
    // Filter and reset your textfield content
}

它并不理想,但它完成了工作。

答案 1 :(得分:0)

也许这会对你有帮助。

- (BOOL)textField:(UITextField *)textField shouldChangeCharactersInRange:(NSRange)range replacementString:(NSString *)string{
    NSCharacterSet *alphaSet = [NSCharacterSet alphanumericCharacterSet];
    BOOL valid = [[string stringByTrimmingCharactersInSet:alphaSet] isEqualToString:@""];
    return valid;
}

要获得一串只有字母数字的字符串,您可以使用此

NSCharacterSet *unwantedCharacters = [[NSCharacterSet alphanumericCharacterSet] invertedSet];
NSLog(@"%@",[[string componentsSeparatedByCharactersInSet: unwantedCharacters] componentsJoinedByString: @""]);

然而,你会在现场自己做一些操作。