iOS UITextField总结

修改光标颜色、placeholder 颜色,手机号输入格式化

  • 修改光标颜色
    //修改textField光标颜色,
    [textField setTintColor:[UIColor redColor]];
    //设置UITextField的光标颜色
    // [[UITextField appearance] setTintColor:[UIColor redColor];
  • 修改placeholder 颜色

通过设置UITextField的attributedPlaceholder属性,修改它的颜色 。因为经常用到,创建UITextField 的分类,将其封装。

/** 设置textfield的placeholder及其颜色  */
-(void)dh_setPlaceholder:(NSString *)placeholder andPlaceholderColor:(UIColor *)placeholderColor {
    NSDictionary *attributes = @{
                                 NSForegroundColorAttributeName:placeholderColor,
                                 NSFontAttributeName:self.font
                                 };
    NSAttributedString *attrString = [[NSAttributedString alloc] initWithString:placeholder attributes:attributes];
    self.attributedPlaceholder = attrString;
}
  • 手机号输入格式化

    在用户输入电话号码时,自动将其格式化为123 4567 8910。

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

    把textField中位置为range的字符串替换为string字符串;此函数在textField内容被修改时调用;使用这个方法来验证使用时用户输入的类型。

    @param textField textField

    @param range UITextField控件中光标选中的字符串,即被替换的字符串;range.length为0时,表示在位置range.location插入string。

    @param string 替换字符串;string.length为0时,表示删除。

    @return YES,表示修改生效;NO,表示不做修改,textField的内容不变。

    实现代码(ps:一下代码均实现在UITextField的分类中):

    -(BOOL)textField:(UITextField *)textField shouldChangeCharactersInRange:(NSRange)range replacementString:(NSString *)string {
      //在输入或删除前的光标位置
      NSRange currentRange = [self cursorPosition];
      //输入或删除前的内容
      NSString *previousContent = textField.text;
      // 限制只能输入数字
      NSCharacterSet *characterSet = [NSCharacterSet characterSetWithCharactersInString:@"0123456789\b"];
      string = [string stringByReplacingOccurrencesOfString:@" " withString:@""];
      if ([string rangeOfCharacterFromSet:[characterSet invertedSet]].location != NSNotFound) {
          return NO;
      }
      //把textField中位置为range的字符串替换为string字符串
      NSString *handleText = [previousContent stringByReplacingCharactersInRange:range withString:string];
      //纯数字的字符串
      NSString *onlyDigitStr = [handleText stringByReplacingOccurrencesOfString:@" " withString:@""];
      NSMutableString *temMstr = [NSMutableString new];
      for (NSInteger i = 0; i < onlyDigitStr.length; i++) {
          if (i == 3 || i == 7) {
              [temMstr appendString:@" "];
          }
          unichar digitchar = [onlyDigitStr characterAtIndex:i];
          [temMstr appendString:[NSString stringWithCharacters:&digitchar length:1]];
      }
      if (temMstr.length >= 14) {
          return NO;
      }
      [textField setText:temMstr];
    /*
      //不做任何处理时,显示的内容
      NSString *text = [previousContent stringByReplacingCharactersInRange:range withString:string];
      text = [text stringByReplacingOccurrencesOfString:@" " withString:@""];
      NSMutableString *temString = [NSMutableString stringWithString:text];
      [temString insertString:@" " atIndex:0];
      text = temString;
      NSString *newString = @"";
      while (text.length > 0) {
          NSString *subString = [text substringToIndex:MIN(text.length, 4)];
          newString = [newString stringByAppendingString:subString];
          if (subString.length == 4) {
              newString = [newString stringByAppendingString:@" "];
          }
          text = [text substringFromIndex:MIN(text.length, 4)];
      }
      newString = [newString stringByTrimmingCharactersInSet:[characterSet invertedSet]];
      if (newString.length >= 14) {
          return NO;
      }
      [textField setText:newString];
    */
      if (string.length == 0) {
          //删除
          currentRange.location --;
          if (currentRange.location == 4 || currentRange.location == 9) {
              currentRange.location --;
          }
      }
      else {
          currentRange.location += string.length;
          if (currentRange.location == 4 || currentRange.location == 9) {
              currentRange.location ++;
          }
      }
      [self setCursorPosition:currentRange];
      return NO;
    }
    /**  光标位置  */
    - (NSRange)cursorPosition {
      UITextPosition* beginning = self.beginningOfDocument;
      UITextRange* selectedRange = self.selectedTextRange;
      UITextPosition* selectionStart = selectedRange.start;
      UITextPosition* selectionEnd = selectedRange.end;
      const NSInteger location = [self offsetFromPosition:beginning toPosition:selectionStart];
      const NSInteger length = [self offsetFromPosition:selectionStart toPosition:selectionEnd];
      return NSMakeRange(location, length);
    }
    /**  设置光标位置  */
    - (void)setCursorPosition:(NSRange) range {
      UITextPosition* beginning = self.beginningOfDocument;
      UITextPosition* startPosition = [self positionFromPosition:beginning offset:range.location];
      UITextPosition* endPosition = [self positionFromPosition:beginning offset:range.location + range.length];
      UITextRange* cursorPosition = [self textRangeFromPosition:startPosition toPosition:endPosition];
      [self setSelectedTextRange:cursorPosition];
    }

    简书地址:https://www.jianshu.com/p/0a0c2155149c

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值