[英]How to filter copy paste string objective c
有什么辦法可以將復制的文本/字符串過濾到UITextField
? 我已經嘗試過使用UITextField
方法shouldChangeCharactersInRange
,但是它只在我們鍵入時過濾,但是當我們粘貼到它時,仍然無法過濾。 我希望UITextField
僅可以通過字母數字輸入,但仍可以通過復制粘貼通過其他char輸入。
這是我的一部分代碼
- (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: @""]);
但是,那么您將需要在現場自己進行一些操作。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.