热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

iOSTextView限制输入字数且屏蔽Emoji表情符号

一、实现的逻辑很简单且代码量不多,直接贴出源码供方便快速使用。1

一、实现的逻辑很简单且代码量不多,直接贴出源码供方便快速使用。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
@property (nonatomic, strong) UITextView *textView;
@property (nonatomic, strong) UILabel *limitLabel;
     _textView = [[UITextView alloc] initWithFrame:CGRectMake( 5 5 , MAIN_WIDTH- 10 130.3 )];
     _textView.placeHolder = @ "请描述您的问题..." ;
     _textView.returnKeyType = UIReturnKeyDone;
     _textView.delegate = self;
     _textView.textColor = UIColorFromRGB( 0xBEBDBD );
     _textView.font = [UIFont systemFontOfSize: 15 ];
     [self addSubview:_textView];
     
     _limitLabel = [[UILabel alloc] initWithFrame:CGRectMake(MAIN_WIDTH/ 4 * 3 130.3 , MAIN_WIDTH/ 4 - 10 20 )];
     _limitLabel.text = @ "0/500" ;
     _limitLabel.font = [UIFont systemFontOfSize: 12 ];
     _limitLabel.textAlignment = NSTextAlignmentRight;
     _limitLabel.textColor = UIColorFromRGB( 0x999999 );
     _limitLabel.backgroundColor = [UIColor clearColor];

二、实现TextView代理方法

实时监听TextView输入框的return键,当点击return键时结束编辑的实现思路:判断输入的字是否为\n回车,即按下return键

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
- ( void )textViewDidChange:(UITextView *)textView {
     _limitLabel.text = [NSString stringWithFormat:@ "%ld/500" ,textView.text.length ];
}
- (BOOL)textView:(UITextView *)textView shouldChangeTextInRange:(NSRange)range replacementText:(NSString *)text{
     NSLog(@ "textLength == %ld" ,textView.text.length);
     if  ([text isEqualToString:@ "\n" ]){  //判断输入的字是否是回车,即按下return
         [self.textView resignFirstResponder];
         return  NO;
     }
     if  ([self stringContainsEmoji:text] == YES) {
         [PubllicMaskViewHelper showTipViewWith:@ "不支持输入Emoji表情符号"  inSuperView:self withDuration: 1 ];
         return  NO;
     }
     if  (textView.text.length + text.length >  500 ) {
         NSString *allText = [NSString stringWithFormat:@ "%@%@" ,textView.text,text];
         textView.text = [allText substringToIndex: 500 ];
         [PubllicMaskViewHelper showTipViewWith:@ "输入不能超过500个字"  inSuperView:self withDuration: 1 ];
         return  NO;
     }
     return  YES;
}

三、过滤所有Emoji表情符号

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
// 过滤所有表情
- (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 ];
          // surrogate pair
          if  ( 0xd800  <= hs && hs   1 ) {
                  const  unichar ls = [substring characterAtIndex: 1 ];
                  const  int  uc = ((hs -  0xd800 ) *  0x400 ) + (ls -  0xdc00 ) +  0x10000 ;
                  if  ( 0x1d000  <= uc && uc   1 ) {
              const  unichar ls = [substring characterAtIndex: 1 ];
              if  (ls ==  0x20e3 ) {
                  returnValue = YES;
              }
              
          else  {
              // non surrogate
              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;
}

推荐阅读
  • 本文介绍了在iOS开发中使用UITextField实现字符限制的方法,包括利用代理方法和使用BNTextField-Limit库的实现策略。通过这些方法,开发者可以方便地限制UITextField的字符个数和输入规则。 ... [详细]
  • 本文讨论了如何使用IF函数从基于有限输入列表的有限输出列表中获取输出,并提出了是否有更快/更有效的执行代码的方法。作者希望了解是否有办法缩短代码,并从自我开发的角度来看是否有更好的方法。提供的代码可以按原样工作,但作者想知道是否有更好的方法来执行这样的任务。 ... [详细]
  • 本文介绍了Python爬虫技术基础篇面向对象高级编程(中)中的多重继承概念。通过继承,子类可以扩展父类的功能。文章以动物类层次的设计为例,讨论了按照不同分类方式设计类层次的复杂性和多重继承的优势。最后给出了哺乳动物和鸟类的设计示例,以及能跑、能飞、宠物类和非宠物类的增加对类数量的影响。 ... [详细]
  • 超级简单加解密工具的方案和功能
    本文介绍了一个超级简单的加解密工具的方案和功能。该工具可以读取文件头,并根据特定长度进行加密,加密后将加密部分写入源文件。同时,该工具也支持解密操作。加密和解密过程是可逆的。本文还提到了一些相关的功能和使用方法,并给出了Python代码示例。 ... [详细]
  • 本文介绍了利用ARMA模型对平稳非白噪声序列进行建模的步骤及代码实现。首先对观察值序列进行样本自相关系数和样本偏自相关系数的计算,然后根据这些系数的性质选择适当的ARMA模型进行拟合,并估计模型中的位置参数。接着进行模型的有效性检验,如果不通过则重新选择模型再拟合,如果通过则进行模型优化。最后利用拟合模型预测序列的未来走势。文章还介绍了绘制时序图、平稳性检验、白噪声检验、确定ARMA阶数和预测未来走势的代码实现。 ... [详细]
  • 电话号码的字母组合解题思路和代码示例
    本文介绍了力扣题目《电话号码的字母组合》的解题思路和代码示例。通过使用哈希表和递归求解的方法,可以将给定的电话号码转换为对应的字母组合。详细的解题思路和代码示例可以帮助读者更好地理解和实现该题目。 ... [详细]
  • 开发笔记:加密&json&StringIO模块&BytesIO模块
    篇首语:本文由编程笔记#小编为大家整理,主要介绍了加密&json&StringIO模块&BytesIO模块相关的知识,希望对你有一定的参考价值。一、加密加密 ... [详细]
  • 1,关于死锁的理解死锁,我们可以简单的理解为是两个线程同时使用同一资源,两个线程又得不到相应的资源而造成永无相互等待的情况。 2,模拟死锁背景介绍:我们创建一个朋友 ... [详细]
  • IjustinheritedsomewebpageswhichusesMooTools.IneverusedMooTools.NowIneedtoaddsomef ... [详细]
  • EPPlus绘制刻度线的方法及示例代码
    本文介绍了使用EPPlus绘制刻度线的方法,并提供了示例代码。通过ExcelPackage类和List对象,可以实现在Excel中绘制刻度线的功能。具体的方法和示例代码在文章中进行了详细的介绍和演示。 ... [详细]
  • 本文整理了315道Python基础题目及答案,帮助读者检验学习成果。文章介绍了学习Python的途径、Python与其他编程语言的对比、解释型和编译型编程语言的简述、Python解释器的种类和特点、位和字节的关系、以及至少5个PEP8规范。对于想要检验自己学习成果的读者,这些题目将是一个不错的选择。请注意,答案在视频中,本文不提供答案。 ... [详细]
  • 本文介绍了Foundation框架中一些常用的结构体和类,包括表示范围作用的NSRange结构体的创建方式,处理几何图形的数据类型NSPoint和NSSize,以及由点和大小复合而成的矩形数据类型NSRect。同时还介绍了创建这些数据类型的方法,以及字符串类NSString的使用方法。 ... [详细]
  • Android,TextView优雅显示长文本、富文本Android提供了TextView这个类作为Android开发当中展示文字的工作,最近笔者在做类似于一个展示类型的APP,发现TextV ... [详细]
  • scroll-在Android上使TextView可滚动我在textview中显示文本似乎太长而不适合进入一个屏幕。我需要让我的TextView可滚动。我能怎么做那? ... [详细]
  • 1.范例说明EditTextWidget设计的初衷是为了等待User输入而准备的,那么在User输入的同时,又该如何拦截所输入的文字呢?Android的多数Widget都有 ... [详细]
author-avatar
手机用户26536338_53
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有