如何过滤复制粘贴字符串目标c
问题描述:
有什么方法可以将复制的文本/字符串过滤到UITextField
? 我已经尝试使用UITextField
方法shouldChangeCharactersInRange
,但它只在我们输入时进行过滤,但是当我们粘贴到它时,仍然无法过滤。我希望UITextField
只能通过字母数字输入,但它仍然可以通过复制粘贴通过其他字符输入。如何过滤复制粘贴字符串目标c
这里有一块我的代码
- (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];
}
在此先感谢。
答
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
}
这是不理想,但它能够完成任务。
答
也许这会帮助你。
- (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: @""]);
但是那么你就必须做一些操作自己在外地。
我收到错误'功能太少的参数调用' – Pareho
对不起,太多的括号。我编辑了'dispatch_after'片段。 – norders