iOS中UITextField和UITextView屏蔽表情符号的输入

起因:云端服务器代码不支持表情符号的输入,所以APP端需要屏蔽掉所有的UITextField和UITextView屏蔽表情符号输入

解决方法:想到两种解决方案,一种是在输入之后过滤掉,网上找了一些过滤的算法,好像都不太好用;另一种屏蔽ios输入表情符输入。(以下解决方法非原创,贴上来是整理记录一下,也给遇到同样问题的人提供一点帮助吧^_^)

(1)以textview为例 加入以下代理方法,就禁止了表情符的输入,[UITextInputMode currentInputMode]这个方法已经在ios7后被启用了,现在在xcode中只是有警告但是可以用,代替它的方法+ (NSArray<NSString *> *)activeInputModes;没有找到怎么用,又会用的留个言哈,非常感谢!

-(BOOL)textView:(UITextView *)textView shouldChangeTextInRange:(NSRange)range replacementText:(NSString *)text {

if ([[[UITextInputMode currentInputMode] primaryLanguage] isEqualToString:@"emoji"]) {

return NO;

}

return YES;

}

(2)为了防止用户输入哈哈,有笑脸提示,从而输入了表情符,在textViewDidEndEditing加入判断是否有表情符输入的方法,如果有弹出alert 提示让用户重新输入。

采用了http://blog.csdn.net/liujinlongxa/article/details/44207003中的算法,好用有效,防止代码找不到,再贴一遍吧。

+ (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;

}

时间: 2024-07-31 15:33:12

iOS中UITextField和UITextView屏蔽表情符号的输入的相关文章

[转]iOS中UITextField 使用全面解析

001//初始化textfield并设置位置及大小002  UITextField *text = [[UITextField alloc]initWithFrame:CGRectMake(20, 20, 130, 30)];003  004//设置边框样式,只有设置了才会显示边框样式 005  text.borderStyle = UITextBorderStyleRoundedRect;006 typedef enum {007    UITextBorderStyleNone,008   

IOS 之 UITextField与UITextView

文本视图(UITextView)与文本框(UITextField)相似,差别在于文本视图可显示一个可滚动和编辑的文本块,供用户阅读或修改.仅当需要的输入很多时,才应使用 UITextView. UITextView 是一个类,选中文本框后可以在 Attribute Inspector 中设置其各种属性. Attribute Inspector 分为3部分,分别是TextField.Control和View部分.我们重点看看TextField部分,TextField部分有以下选项: Text:设置

IOS中UITextField限制字数,特别是中文

首先,如果只是数字和英文,那只需要实现UITextField或UITextView的Delegate. - (BOOL)textField:(UITextField *)textField shouldChangeCharactersInRange:(NSRange)range replacementString:(NSString *)string { if (textField == self.titleField) { if (textField.length > 20) return N

iOS中UITextField的字数限制

刚开始的时候, 采用的是shouldChangeCharactersInRange http://stackoverflow.com/questions/433337/set-the-maximum-character-length-of-a-uitextfield 这样在输入全部是英文的情况下是可以的. 但是当输入是中文时, 由于shouldChangeCharactersInRange判断的是当前键盘的字符数, 会出现这样的问题: 比如你还剩下2个字可以打, 你想输入"张三", &

iOS中UITextField用法

//初始化textfield并设置位置及大小 UITextField *text = [[UITextField alloc]initWithFrame:CGRectMake(0, 40, 150, 30)]; //设置边框样式,只有设置了才会显示边框样式,否则默认是没有边框的 text.borderStyle = UITextBorderStyleRoundedRect; typedef enum { UITextBorderStyleNone, UITextBorderStyleLine,

iOS中UITextField 使用全面解析

//初始化textfield并设置位置及大小 UITextField *text = [[UITextField alloc]initWithFrame:CGRectMake(20, 20, 130, 30)]; //设置边框样式,只有设置了才会显示边框样式 text.borderStyle = UITextBorderStyleRoundedRect; typedef enum { UITextBorderStyleNone, UITextBorderStyleLine, UITextBord

iOS中UITextField输入判断小数点后两位

在输入金额的UITextField中,要给予三个规则的判断 1. 只能输入数字(可以通过设置键盘类型为Decimal Pad) 2. 小数点只能有一个 3. 小数点后最多有两位数字 (可以通过正则表达式或者长度判断) 2. 和3. 的代码 (首先引入UITextFieldDelegate,指定代理为自己) - (BOOL)textField:(UITextField *)textField shouldChangeCharactersInRange:(NSRange)range replacem

ios 6.x系统UITextView 设置为密码输入无效的问题

今天做UITextField的密码显示功能时, iOS6.1下调用textField.secureTextEntry=true居然无效,无法恢复成星号.而iOS7下则正常,怀疑是6.1系统的Bug. 最后在StackOverflow找到了答案:http://stackoverflow.com/questions/23782671/ios-uitextflied-securetextentry-not-working-on-ios-6-1/23782982#23782982 对于6.x的系统,使用

关于iOS中UIView类视图的圆角

iOS开发中,常常由于需求,而需要圆角的样式.如果4个角都是圆角的,还好说.一行两行代码就可以搞定.就是CAlayer.可是现在我想说下不规则的圆角.目前我还没有找到更好的方法来画圆角.希望有解决方法的朋友看到这篇文章,能交流学习下. 1 UIBezierPath *maskPath = [UIBezierPath bezierPathWithRoundedRect:sourceView.bounds byRoundingCorners:UIRectCornerBottomLeft | UIRe