iOS 設定輸入框的指定字元輸入

來源:互聯網
上載者:User

標籤:idt   通過   觀察者   這一   elf   div   expr   sep   ext   

一、只能輸入純數字

在這裡以UITextField為例:其實現代碼如下:

123456789101112131415161718 - (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;}

另外我們還有一種更加簡便的方法來實現這一目的:

首先宏定義

1 #define NUMBER @"0123456789"

接著

123456 - (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];}

二、只能輸入純大小寫字母

和以上只能輸入純數字類似,實現起來簡單,只需要宏定義

1 #define LETTER @"ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz"

然後實現

123456 - (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];}

三、大小寫字母和數字結合輸入

對照以上

1 #define LETTER_NUMBER @"ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789"

同樣道理具體能夠輸入那些內容如果輸入內容能夠一一列舉的話我們就可以通過define來設定了,實現起來超簡單。

限制只能輸入中文

在這裡用到了觀察者

12345678910111213141516171819202122232425262728293031323334353637383940414243 - (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];}

如果要限制輸入字元位元的話可以直接設定,這個實現上有很多種,最簡單的就是

123456 - (void)textViewDidChange:(UITextView *)textView{    NSInteger number = [textView.text length];    if (number > 300) {        textView.text = [textView.text substringToIndex:300];    }}

iOS 設定輸入框的指定字元輸入

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.