前言
對于開發者來說,在很多情況下,一般的輸入框需要按照要求進行輸入,輸入內容由開發人員來指定。例如:密碼輸入框只能輸入純數字或者是拼音與數字結合的文本等,那么我們在開發的時候就需要做一些輸入文本的限時。下面話不多說了,來一起看看詳細的介紹吧。
一、只能輸入純數字
在這里以UITextField為例:其實現代碼如下:
- (BOOL)textField:(UITextField *)textField shouldChangeCharactersInRange:(NSRange)range replacementString:(NSString *)string { return [self validateNumber:string];}- (BOOL)validateNumber:(NSString*)number { BOOL res = YES; NSCharacterSet* tmpSet = [NSCharacterSet characterSetWithCharactersInString:@"0123456789"]; int i = 0; while (i < number.length) { NSString * string = [number substringWithRange:NSMakeRange(i, 1)]; NSRange range = [string rangeOfCharacterFromSet:tmpSet]; if (range.length == 0) { res = NO; break; } i++; } return res;}
另外我們還有一種更加簡便的方法來實現這一目的:
首先宏定義
#define NUMBER @"0123456789"
接著
- (BOOL)textField:(UITextField *)textField shouldChangeCharactersInRange:(NSRange)range replacementString:(NSString *)string{ NSCharacterSet *cs = [[NSCharacterSet characterSetWithCharactersInString:NUMBER] invertedSet]; NSString *filtered = [[string componentsSeparatedByCharactersInSet:cs] componentsJoinedByString:@""]; return [string isEqualToString:filtered];}
二、只能輸入純大小寫字母
和以上只能輸入純數字類似,實現起來簡單,只需要宏定義
#define LETTER @"ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz"
然后實現
- (BOOL)textField:(UITextField *)textField shouldChangeCharactersInRange:(NSRange)range replacementString:(NSString *)string{ NSCharacterSet *cs = [[NSCharacterSet characterSetWithCharactersInString:LETTER] invertedSet]; NSString *filtered = [[string componentsSeparatedByCharactersInSet:cs] componentsJoinedByString:@""]; return [string isEqualToString:filtered];}
三、大小寫字母和數字結合輸入
對照以上
#define LETTER_NUMBER @"ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789"
同樣道理具體能夠輸入那些內容如果輸入內容能夠一一列舉的話我們就可以通過define來設置了,實現起來超簡單。
限制只能輸入中文
在這里用到了觀察者
- (void)viewDidLoad { [super viewDidLoad]; _myTextField.delegate = self; [[NSNotificationCenter defaultCenter]addObserver:self selector:@selector(textFiledEditChanged:) name:UITextFieldTextDidChangeNotification object:_myTextField];}- (BOOL)textFieldShouldReturn:(UITextField *)textField{ [textField resignFirstResponder]; //過濾非漢字字符 textField.text = [self filterCharactor:textField.text withRegex:@"[^/u4e00-/u9fa5]"]; if (textField.text.length >= 4) { textField.text = [textField.text substringToIndex:4]; } return NO;}- (void)textFiledEditChanged:(id)notification{ UITextRange *selectedRange = _myTextField.markedTextRange; UITextPosition *position = [_myTextField positionFromPosition:selectedRange.start offset:0]; if (!position) { //// 沒有高亮選擇的字 //過濾非漢字字符 _myTextField.text = [self filterCharactor:_myTextField.text withRegex:@"[^/u4e00-/u9fa5]"]; if (_myTextField.text.length >= 4) { _myTextField.text = [_myTextField.text substringToIndex:4]; } }else { //有高亮文字 //do nothing }}- (NSString *)filterCharactor:(NSString *)string withRegex:(NSString *)regexStr{ NSString *searchText = string; NSError *error = NULL; NSRegularExpression *regex = [NSRegularExpression regularExpressionWithPattern:regexStr options:NSRegularExpressionCaseInsensitive error:&error]; NSString *result = [regex stringByReplacingMatchesInString:searchText options:NSMatchingReportCompletion range:NSMakeRange(0, searchText.length) withTemplate:@""]; return result;}- (void)dealloc{ [[NSNotificationCenter defaultCenter] removeObserver:self];}
如果要限制輸入字符位數的話可以直接設置,這個實現上有很多種,最簡單的就是
- (void)textViewDidChange:(UITextView *)textView{ NSInteger number = [textView.text length]; if (number > 300) { textView.text = [textView.text substringToIndex:300]; }}
總結
以上就是這篇文章的全部內容了,希望本文的內容對大家的學習或者工作具有一定的參考學習價值,如果有疑問大家可以留言交流,謝謝大家對VEVB武林網的支持。
新聞熱點
疑難解答