有没有办法将复制的文字/字符串过滤到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];
}
提前致谢。
答案 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: @""]);
然而,你会在现场自己做一些操作。