iOS “金额” 输入框的设置

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了iOS “金额” 输入框的设置相关的知识,希望对你有一定的参考价值。

参考技术A 一般的都是只能输入数字 以及小数点后两位

-(BOOL)textField:(UITextField *)textField shouldChangeCharactersInRange:(NSRange)range replacementString:(NSString *)string

  // 判断是否有小数点

  if([textField.textcontainsString:@"."])

      self.isHaveDian=YES;

  else

      self.isHaveDian=NO;

 

  if(string.length>0)

      //当前输入的字符

      unicharsingle = [stringcharacterAtIndex:0];

      // 不能输入.0-9以外的字符

      if(!((single >='0'&& single <='9') || single =='.'))returnNO;

      // 只能有一个小数点

      if(self.isHaveDian&& single =='.')returnNO;

      // 如果第一位是.则前面加上0.

      if((textField.text.length==0) && (single =='.'))

          textField.text=@"0";

     

      // 如果第一位是0则后面必须输入点,否则不能输入。

      if([textField.texthasPrefix:@"0"])

          if(textField.text.length>1)

              NSString*secondStr = [textField.textsubstringWithRange:NSMakeRange(1,1)];

              if(![secondStrisEqualToString:@"."])returnNO;

          else

              if(![stringisEqualToString:@"."])returnNO;

         

     

      // 小数点后最多能输入两位

      if(self.isHaveDian)

          NSRangeran = [textField.textrangeOfString:@"."];

          // 由于range.location是NSUInteger类型的,所以这里不能通过(range.location - ran.location)>2来判断

          if(range.location> ran.location)

              if([textField.textpathExtension].length>1)returnNO;

         

     

   

    return YES;

iOS 设置输入框的指定字符输入

一、只能输入纯数字

在这里以UITextField为例:其实现代码如下:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
- (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"

接着

1
2
3
4
5
6
- (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"

然后实现

1
2
3
4
5
6
- (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来设置了,实现起来超简单。

限制只能输入中文

在这里用到了观察者

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
- (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];
}

如果要限制输入字符位数的话可以直接设置,这个实现上有很多种,最简单的就是

1
2
3
4
5
6
- (void)textViewDidChange:(UITextView *)textView{
    NSInteger number = [textView.text length];
    if (number > 300) {
        textView.text = [textView.text substringToIndex:300];
    }
}

以上是关于iOS “金额” 输入框的设置的主要内容,如果未能解决你的问题,请参考以下文章

移动端开发,H5对number输入框的一些处理

输入框提示信息的设置与输入框的焦点取消

移动端HTML5页面端去掉input输入框的白色背景和边框(兼容Android和ios)

iOS之自动调节输入文本框的高度

输入框小数位限制

设置警告框为带有一个密文输入框的样式,并设置输入框键盘为数字键盘;判断密文输入框里的内容,并弹出相应提示