1, 使用NSNotification监控变化:
[[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(textFieldDidChanged:) name:UITextFieldTextDidChangeNotification object:nil];
2,文本变化事件回调:
- (void)textFieldDidChanged:(NSNotification *)notification { if (_wordsMaxCount > 0) { UITextField *textField = _input_text_textField; NSString *toBeString = textField.text; NSString *lang = [[UITextInputMode currentInputMode] primaryLanguage]; // 键盘输入模式 if ([lang isEqualToString:@"zh-Hans"]) { // 简体中文输入,包括简体拼音,健体五笔,简体手写 UITextRange *selectedRange = [textField markedTextRange]; //获取高亮部分 UITextPosition *position = [textField positionFromPosition:selectedRange.start offset:0]; if (!position || !selectedRange) { // 没有高亮选择的字,则对已输入的文字进行字数统计和限制 textField.text = [self getString:toBeString withCountLimit:_wordsMaxCount]; } else { // 有高亮选择的字符串,则暂不对文字进行统计和限制 } } else { // 中文输入法以外的直接对其统计限制即可,不考虑其他语种情况 textField.text = [self getString:toBeString withCountLimit:_wordsMaxCount]; } } }
3, 字符串截取函数:
- (NSString *)getString:(NSString *)toBeString withCountLimit:(NSInteger)limit { NSStringEncoding encoding = CFStringConvertEncodingToNSStringEncoding(kCFStringEncodingGB_18030_2000); NSData *toBeStringData = [toBeString dataUsingEncoding:encoding]; NSInteger dataLength = [toBeStringData length]; if (dataLength > limit) { NSString *limitString = nil; while (!limitString) { limitString = [[NSString alloc] initWithData:[toBeStringData subdataWithRange:NSMakeRange(0, limit)] encoding:encoding]; limit --; if (limit <= 0) break; } return limitString; } return toBeString; }
4,移除Notification监控
[[NSNotificationCenter defaultCenter] removeObserver:self name:UITextFieldTextDidChangeNotification object:nil];
相关推荐
2. **显示剩余输入字数**:在控件旁边添加一个标签,动态更新剩余可输入的字符数。当用户输入时,标签的数字会递减,当达到最大值时显示为0或提示用户已达上限。 3. **筛选emoji表情**:有些应用可能不支持或不希望...
Swift提供了强大的泛型和字符串处理能力,这使得我们可以方便地编写一个扩展,为UITextField和UITextView添加自定义的限制功能。以下是一行代码的示例: ```swift extension UITextField { func limitInput(_ ...
`StringUtils`类可能包含了一些静态方法,用于检测字符串中是否包含emoji字符。 在`StringUtils.h`中,我们可以预见到一个或多个声明的方法,如`+ (BOOL)containsEmoji:(NSString *)string;`,这个方法的作用是判断...
在UTF-8编码下,英文字符和数字通常占用1个字节,汉字占用3个字节,而某些特殊字符如Emoji则可能占用3或4个字节。因此,限制字节数会更复杂,因为可能会导致字符串截断后出现乱码。 ### 一、字符限制 在限制字符数...
在某些场景下,我们可能需要对用户的输入进行限制,比如仅允许输入中文、英文和数字,并且实时限制输入的字符数量。这篇文档将详细介绍如何实现这样的功能,并提供了一段封装好的代码示例。 首先,为了监听文本输入...
4. **数据模型(Data Model)**:存储和管理emoji数据,这可能是一个数组或者字典,键值对可以是emoji字符和对应的图像资源。 5. **协议(Protocol)**:定义与主应用的通信协议,例如`...
在iOS开发中,实现一个表情键盘通常涉及到对系统emoji资源的获取、自定义键盘界面设计以及与应用交互的逻辑处理。下面将详细讲解这个过程中的关键知识点。 首先,我们需要了解如何在iOS中获取系统内置的emoji表情。...
- Unicode是一种国际标准,用于表示世界上几乎所有的文字和符号,包括汉字、拉丁字母、希腊字母等,其目标是为每个字符提供一个唯一的数字编码。 - UTF(Unicode Transformation Format)是Unicode的编码方案,...
最近产品提了一个需求:要求某个“输入框”禁止输入 Emoji 表情,我们能想到的方案是:在 UITextField 的 textField:shouldChangeCharactersInRange:replacementString: 代理方法中判断即将输入的字符串是否包含 ...
对于表情支持,可能需要集成特定的Emoji键盘或者处理Unicode字符。 为了便于集成和自定义,YHMessageView可能提供了接口供开发者设置颜色、字体、按钮标题等属性。这通常通过公开相应的setter方法或者使用...
2. **表情资源**:在“ios-ExpressionCS.zip”中,我们看到了“自定义sina”、“浪小花”和“emoji表情键盘”的文件名,这暗示了不同主题的自定义表情包。这些资源通常为PNG或者SVG格式的图像文件,存储在应用的资源...
在iOS程序开发中,有时我们需要限制用户在输入框(如UITextField或UITextView)中输入特定类型的内容,例如禁止输入表情符号。本实例将详细介绍如何在iOS应用中实现这个功能,以防止用户在输入框内使用表情。 首先...
在iOS开发中,创建一个类似QQ输入框的案例是一个常见的需求,特别是在开发聊天应用时。这个案例涉及到的主要知识点包括UI设计、用户交互、文本处理以及自定义控件的实现。以下是对这些知识点的详细说明: 1. **UI...
3. **表情插入**:在iOS应用中,表情输入通常涉及到 emoji 字符集的处理。CXTextView可能实现了一个表情面板,用户可以从面板中选择表情并将其插入到文本中。这需要处理Unicode编码和表情映射。 4. **链接检测**:...
首先,我们需要一个包含表情的字符串库。通常,这些表情可以从 Emoji.plist 文件中获取,这是一个包含所有可用iOS表情的资源文件。你可以通过解析这个文件,将其中的表情提取出来,用于构建键盘界面。 接下来,为了...
2. 提供一个方法,接收一个富文本字符串(NSAttributedString)和字体大小,将其中的表情文本替换为对应的图片。 利用系统的`UITextView`或`UITextField`,可以轻松实现自定义键盘。`inputView`属性用于设置显示在...