https://www.jianshu.com/p/5227e6aab4d4

2017.02.27 13:08* 字数 146 阅读 6109评论 6喜欢 14

又遇到输入框输入表情的情况了,之前写了一篇文章“UITextView/UITextField检测并过滤Emoji表情符号”http://www.jianshu.com/p/90d68e7e5d53,但是总觉得那两种方式都各有弊端,这次又遇到之后,仔细考虑了下之后,想到了用两种方式组合在一起使用,测试结果暂时没什么问题,在输入时就限制了emoji表情输入,完全符合需求。在此贴出代码,如果有什么问题,欢迎指正!

@interface JQTestViewController ()<UITextFieldDelegate>

@property (weak, nonatomic) IBOutlet UITextField *textField;

@property (nonatomic, assign) NSInteger textLocation;//这里声明一个全局属性,用来记录输入位置

@end

- (void)viewDidLoad {

[super viewDidLoad];

self.textField.delegate = self;

[self.textField addTarget:self action:@selector(textFieldDidChanged:) forControlEvents:UIControlEventEditingChanged];//注意:textFied没有textFieldDidChanged代理方法,但是有UITextFieldTextDidChangeNotification通知,这里添加通知方法,textView有textFieldDidChanged代理方法,下面用法一样

}

#pragma mark-- UITextFieldDelegate

//在输入时,调用下面那个方法来判断输入的字符串是否含有表情

- (void)textFieldDidChanged:(UITextField *)textField

{

if (textField.text.length > 20) {

textField.text = [textField.text substringToIndex:20];

[self showMessage:@"不可超过20字!"];

}else {

if (self.textLocation == -1) {

NSLog(@"输入不含emoji表情");

}else {

NSLog(@"输入含emoji表情");

//截取emoji表情前

textField.text = [textField.text substringToIndex:self.textLocation];

}

}

}

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

{

NSLog(@"location-->>%lu",(unsigned long)range.location);

NSLog(@"replacementString-->>%@",string);

//禁止输入emoji表情

if ([self stringContainsEmoji:string]) {

self.textLocation = range.location;

}else {

self.textLocation = -1;

}

return YES;

}

//表情符号的判断

- (BOOL)stringContainsEmoji:(NSString *)string {

__block BOOL returnValue = NO;

[string enumerateSubstringsInRange:NSMakeRange(0, [string length])

options:NSStringEnumerationByComposedCharacterSequences

usingBlock:^(NSString *substring, NSRange substringRange, NSRange enclosingRange, BOOL *stop) {

const unichar hs = [substring characterAtIndex:0];

if (0xd800 <= hs && hs <= 0xdbff) {

if (substring.length > 1) {

const unichar ls = [substring characterAtIndex:1];

const int uc = ((hs - 0xd800) * 0x400) + (ls - 0xdc00) + 0x10000;

if (0x1d000 <= uc && uc <= 0x1f77f) {

returnValue = YES;

}

}

} else if (substring.length > 1) {

const unichar ls = [substring characterAtIndex:1];

if (ls == 0x20e3) {

returnValue = YES;

}

} else {

if (0x2100 <= hs && hs <= 0x27ff) {

returnValue = YES;

} else if (0x2B05 <= hs && hs <= 0x2b07) {

returnValue = YES;

} else if (0x2934 <= hs && hs <= 0x2935) {

returnValue = YES;

} else if (0x3297 <= hs && hs <= 0x3299) {

returnValue = YES;

} else if (hs == 0xa9 || hs == 0xae || hs == 0x303d || hs == 0x3030 || hs == 0x2b55 || hs == 0x2b1c || hs == 0x2b1b || hs == 0x2b50) {

returnValue = YES;

}

}

}];

return returnValue;

}

转载于:https://www.cnblogs.com/sundaysgarden/p/10312844.html

iOStextField/textView在输入时限制emoji表情的输入相关推荐

  1. 文本输入带有Emoji表情问题

    前几天项目中调用后台接口的时候,返回系统异常.排查后,原因是一个textview输入emoji表情,导致提交资料失败: 原因很简单,后端没有存储响应的emoji字符编码: 最后找到解决方法有两个,不过 ...

  2. Jquery实现emoji表情包输入

    在jquery中输入emoji表情,进行展示存储.这里只负责前端,未考虑到后台存储. 直接上图: 需要下载的请直接去我的"下载"里寻找安装包,无需积分,直接下载.

  3. mysql 过滤emoji表情_用JS过滤Emoji表情的输入

    本文为原创,转载请注明出处: cnzt       文章:cnzt-p 在前端页面开发过程中,总会碰到不允许输入框输入emoji表情的需求,我的思路是通过编码用正则匹配表情,然后将其替换为空字符创.但 ...

  4. PHP过滤输入的emoji表情

    1.过滤emoji表情的原因 在我们的项目开发中,emoji表情是个麻烦的东西,即使我们可以能存储,也不一定能完美显示,因为它的更新速度很快:在iOS以外的平台上,例如PC或者android.如果你需 ...

  5. 小程序-input框如何输入带有emoji表情功能

    //将emoji表情进行转义再发送至后台 var nikeName= '小罗老师%F0%9F%98%82'let regex = /[\uD83C|\uD83D|\uD83E][\uDC00-\uDF ...

  6. iOS禁止输入emoji表情

    因为emoji编码在android或者pc设备没有很好的支持,所以有时候为了禁止emoji表情的输入,因为关闭不了系统emoji的键盘,那只能根据编码把emoji表情过滤掉,写了一个NSString的 ...

  7. 在Android系统中使用系统自带的emoji表情

    一,对emoji表情的理解 emoji表情是一种表情符号,在代码中它现在其实是一组遵循Unicode的编码,即每一个表情符号都对应了一个Unicode编码.更进一步说,emoji表情实际上是一组Uni ...

  8. android 自带的表情,在Android系统中使用系统自带的emoji表情

    一,对emoji表情的理解 emoji表情是一种表情符号,在代码中它现在其实是一组遵循Unicode的编码,即每一个表情符号都对应了一个Unicode编码.更进一步说,emoji表情实际上是一组Uni ...

  9. Emoji表情图标在iOS与PHP之间通信及MySQL存储

    在某个 iOS 项目中,需要一个服务器来保存一些用户数据,例如用户信息.评论等,我们的服务器端使用了 PHP+MySQL 的搭配.在测试过程中我们发现,用户在 iOS 端里输入了 Emoji 表情提交 ...

最新文章

  1. [MySQL Reference Manual] 5 MySQL 服务管理
  2. Linux Tensorflow2.0安装
  3. 免费实现服务器登录手机短信通知
  4. 字典、列表、元祖、字符串的综合(2)
  5. Fleury (弗罗莱) 算法通俗解释
  6. 企业的无线安全问题综合解决方案
  7. 数据库SQL基础select语法
  8. arduino定时器函数如何使用_excel如何使用函数公式来查找图片
  9. Python爬虫连载16-OCR工具Tesseract、Scrapt初步
  10. django跳转到其他页面的方式
  11. inputType属性
  12. Unity的序列化机制探索
  13. 算法设计与分析练习题答案
  14. 快速解决Ubuntu无法访问Windows分区的问题
  15. 《基因大数据智能生产及分析》笔记
  16. oracle rac 成本及架构,Oracle Extended RAC 架构实战
  17. 六祎-Mybatis高速下载通道
  18. css3 立方体3d旋转效果
  19. 自动驾驶落地,究竟被什么「绑」住了脚?
  20. 设计模式--builder 模式

热门文章

  1. 将万亿以下的阿拉伯数字转为中文金额
  2. WinCE下监视设备插拔的参考代码
  3. 阿里云服务器一分价钱一分货,切记!
  4. 再送一波干货,测试2000线程并发下同时查询1000万条数据库表及索引优化
  5. Spring MVC-表单(Form)标签-下拉框(Dropdown)示例(转载实践)
  6. [已解决]Vistual Stdio 2015 installer Bootstrapper Packages 路径
  7. WPF01(xaml)
  8. 图片延迟加载和滑动翻页
  9. 移动后端支持平台Parse将API由Ruby迁移到Go
  10. Web Service实现分布式服务的基本原理