//
//  UITextField+Category.m
//  StudentClient
//
//  Created by 张宁宁 on 16/8/1.
//  Copyright © 2016年 lirenkj. All rights reserved.
//

#import "UITextField+Category.h"

@implementation UITextField (Category)
static NSString *kLimitTextLengthKey = @"kLimitTextLengthKey";
- (void)limitTextLength:(int)length{
    objc_setAssociatedObject(self, (__bridge const void *)(kLimitTextLengthKey), [NSNumber numberWithInt:length], OBJC_ASSOCIATION_RETAIN_NONATOMIC);
    
    [self addTarget:self action:@selector(textFieldTextLengthLimit:) forControlEvents:UIControlEventEditingChanged];
}

- (void)textFieldTextLengthLimit:(id)sender
{
    NSNumber *lengthNumber = objc_getAssociatedObject(self, (__bridge const void *)(kLimitTextLengthKey));
    int length = [lengthNumber intValue];
    //下面是修改部分
    bool isChinese;//判断当前输入法是否是中文
    NSArray *currentar = [UITextInputMode activeInputModes];
    UITextInputMode *current = [currentar firstObject];

if ([current.primaryLanguage isEqualToString: @"en-US"]) {
        isChinese = false;
    }
    else
    {
        isChinese = true;
    }
    
    if(sender == self) {
        // length是自己设置的位数
        NSString *str = [[self text] stringByReplacingOccurrencesOfString:@"?" withString:@""];
        if (isChinese) { //中文输入法下
            //          int  chineseLength = length/2;
            UITextRange *selectedRange = [self markedTextRange];
            //获取高亮部分
            UITextPosition *position = [self positionFromPosition:selectedRange.start offset:0];
            // 没有高亮选择的字,则对已输入的文字进行字数统计和限制
            if (!position) {
                //                if ( str.length>=length) {
                int textcount = [self convertToInt:[self text]];
                if ([self convertToInt:[self text]] >= length) {
                    NSString *strNew = [NSString stringWithString:str];
                    int chineseCount = [[NSString stringWithFormat:@"%lu",textcount - str.length] intValue];
                    
                    int indexCount = (length/2 -(textcount - 2*chineseCount)/2 )+ (textcount - 2*chineseCount);
                    
                    [self setText:[strNew substringToIndex:indexCount]];
                }
            }
            else
            {
                // NSLog(@"输入的");
                
            }
        }else{
            if ([str length]>=length) {
                NSString *strNew = [NSString stringWithString:str];
                [self setText:[strNew substringToIndex:length]];
            }
        }
    }
}
-(int)convertToInt:(NSString*)strtemp {
    
    int strlength = 0;
    char* p = (char*)[strtemp cStringUsingEncoding:NSUnicodeStringEncoding];
    for (int i=0 ; i<[strtemp lengthOfBytesUsingEncoding:NSUnicodeStringEncoding] ;i++) {
        if (*p) {
            p++;
            strlength++;
        }
        else {
            p++;
        }
    }
    return strlength;
    
}
@end

UITextField输入字符限制,中英文混排相关推荐

  1. html中英文混排,EndNote中英文混排时et al和等的3种解决方法 | 科研动力

    EndNote对于英文文献的处理很出色,但是对于中文文献的处理就有点别扭,尤其是中英文文献混排时更是不爽.木有关系,EndNote的强大这处之一就是可以驯服和调教.下面介绍3种如何处理中英文混排时et ...

  2. EndNote 高校_EndNote引文格式修改全攻略(一)——中英文混排问题

    虽然今年受疫情影响较大,但大部分毕业生还是要在家码论文的.说到毕业论文,就必定要有格式修改,但对一些科研老手来讲可能论文修改也不一定能玩的很溜. 今天小编先带大家带来论文格式修改的第一部分内容,教你解 ...

  3. CTeX:中英文混排无法正常换行+字体调整+行距调整

    关于无法正常换行:一行与一行有时会参差不齐 参考材料:ctex-faq"中英文混排是为何无法正确分排?" 简单地说,一是英文字符后面要空格,二是中英文字符间要隔开 关于字体调整:\ ...

  4. 参考文献名称怎么复制_[Zotero+Word]Zotero+Word2016参考文献中英文混排,解决et al和等的问题...

    注: 参考文献是用chinese-gb7714-1987-...或chinese-gb7714-2005-...等csl生成的参考文献,也就是英文作者超过3个后面是"等". 其他参 ...

  5. 解决方案:Zotero实现参考文献中英文混排,将英文文献中的“等”转成“et al.”

    Zotero 是一款非常实用且易于使用的参考文献管理工具,可帮助用户收集.整理和引用各种类型的文献,包括图书.期刊文章.网页等.在学术写作中起着重要作用. 但是其在中文世界中,运行起来偶尔会出现问题, ...

  6. Endnote生成GB/T7714-2005输出格式及中英文混排问题解决

    这里写目录标题 GB/T7714-2005输出格式 中英文混排问题 GB/T7714-2005输出格式 step1. 在Endnote的官网(http://www.endnote.com/)下载Chi ...

  7. Word如何删除中英文混排中中文间的多余空格

    如何快速批量删除word中多余的空格呢,尤其是中英文混排的文档,有时会有连续的多个空格,如何去掉中文中的空格,同时保留英语单词间的空格呢.今天就和朋友们说说去掉word中空格的简单好用的方法吧! 1. ...

  8. EndNote中英文混排时et al和等的3种解决方法

    EndNote对于英文文献的处理很出色,但是对于中文文献的处理就有点别扭,尤其是中英文文献混排时更是不爽.木有关系,EndNote的强大这处之一就是可以驯服和调教.下面介绍3种如何处理中英文混排时et ...

  9. EndNote中英文混排时et al和等的解决方法

    EndNote对于英文文献的处理很出色,但是对于中文文献的处理就有点别扭,尤其是中英文文献混排时更是不爽.木有关系,EndNote的强大这处之一就是可以驯服和调教.下面介绍3种如何处理中英文混排时et ...

  10. 解决Android TextView中英文混排换行问题

    文章目录 个人极不建议这样做(之后会说原因) 1 现象 2 解决思路 3不推荐的原因 个人极不建议这样做(之后会说原因) 1 现象 绿色底黄色框内的就是原生TextView出现的情况,出现这种情况的主 ...

最新文章

  1. Spring boot 上传文件时 MultipartFile 报空指针
  2. [BZOJ1502]月下柠檬树(自适应辛普森积分)
  3. [蓝桥杯]ALGO-188.算法训练_P0504
  4. ViewState笔记
  5. Python爬虫实战---抓取图书馆借阅信息
  6. SharePoint 2007 权限代码分享
  7. SPSS 相关性的选择
  8. Yii Framework2.0开发教程(5)数据库mysql函数
  9. 订阅付费专栏,支付299.9元,免费送代码
  10. win7查询计算机硬盘sn,电脑win7系统查询硬盘序列号的方法
  11. win7电脑设备序列号怎么查_win7硬盘序列号怎么看|win7查看硬盘序列号的方法
  12. Grid++用程序定义报表模板(官方例子)
  13. 自定义linux桌面,教您6个自定义Ubuntu桌面的步骤
  14. android apk安装工具,安卓装机必备工具!一键批量安装应用apk
  15. php 函数索引 中文索引
  16. 2022危险化学品经营单位主要负责人特种作业证考试题库及答案
  17. 计算机网络参数配置,计算机网络实验:实验一 主机系统网络参数配置与测试.doc...
  18. Zemax优化过程中的Rings和Arms
  19. 2.1 墒编码基本原理
  20. linux运维高薪职业及任职要求梳理

热门文章

  1. Linux安装FTP及使用python上传下载ftp
  2. 蓝桥杯 异或数列 python组
  3. mysql 建库 语法_mysql语法建库建表综合整理是示例
  4. 武侠乂怎么修改服务器,武侠乂新手怎么玩 武侠乂手游新手入门技巧
  5. html表格内图片填充颜色设置,使用HTML添加表格4(行颜色与表格嵌套)——零基础自学网页制作...
  6. 前端全局变量和局部变量
  7. python读写excel表格
  8. Android12 (S) 去掉悬浮通知消息及通知创建流程分析
  9. 关于表格的增删改!!我必须泄个恨了!!
  10. 应变.破局2022,合众致达逐梦.无惧