限制UITextView的字数和字数监控,表情异常的情况和禁用表情
限制UITextView的字数和字数监控,表情异常的情况和禁用表情
因为字数占一个字符,表情占两个字符。你要是限制15个字符的话,全打表情的话,最后一个表情会出现错误,所以要使用监听,对UITextViewTextDidChangeNotification监听,想用的可以直接拿来用,废话不多说,直接上代码!!UITextfield也是一样,只不过把监听写为UITextfieldTextDidChangeNotification
//移除监听
-(void)dealloc{
[[NSNotificationCenter defaultCenter] removeObserver:self name:@"UITextViewTextDidChangeNotification" object:TtextView];
}
-(void)show{
//输入详细
TtextView = [[UITextView alloc]initWithFrame:CGRectMake(5*khScale, 5*khScale, self.view.frame.size.width-10*kScale, 160*khScale)];
TtextView.backgroundColor = [UIColor whiteColor];
TtextView.font = [UIFont systemFontOfSize:15*kScale];
TtextView.tag = 301;
TtextView.delegate = self;
[self.view addSubview:TtextView];
[[NSNotificationCenter defaultCenter]addObserver:self selector:@selector(textFiledEditChanged9:) name:@"UITextViewTextDidChangeNotification" object:TtextView];
NSInteger textlength9;
- (void)textFiledEditChanged9:(UITextView *)textView {
NSString *toBeString = TtextView.text;
//获取高亮部分
UITextRange *selectedRange = [TtextView markedTextRange];
UITextPosition *position = [TtextView positionFromPosition:selectedRange.start offset:0];
// 没有高亮选择的字,则对已输入的文字进行字数统计和限制
if (!position)
{
if (toBeString.length > 200 && TtextView.markedTextRange == nil)
{
//用字符串的字符编码指定索引查找位置
NSRange rangeIndex = [toBeString rangeOfComposedCharacterSequenceAtIndex:200];
if (rangeIndex.length == 1)
{
TtextView.text = [toBeString substringToIndex:200];
}
else
{
//用字符串的字符编码指定区域段查找位置
// NSRange rangeRange = [toBeString rangeOfComposedCharacterSequencesForRange:NSMakeRange(0, Max_Length)];
TtextView.text = [toBeString substringWithRange:NSMakeRange(0, textlength9)];
}
} else {
textlength9 = toBeString.length;
}
}
}
- (void)textViewDidChangeSelection:(UITextView *)textView{
_textNumberLabel.text = [NSString stringWithFormat:@"%lu/200",(unsigned long)TtextView.text.length];
if (TtextView.text.length >=200) {
_textNumberLabel.textColor = [UIColor redColor];
}
else{
_textNumberLabel.textColor = [UIColor colorWithRed:153.0/255.0 green:153.0/255.0 blue:153.0/255.0 alpha:1.0];
}
[self textChanged];
}
-(void)textChanged{
CGRect orgRect = TtextView.frame;//获取原始UITextView的frame
CGSize size = [TtextView sizeThatFits:CGSizeMake(TtextView.frame.size.width, MAXFLOAT)];
orgRect.size.height=size.height+10;//获取自适应文本内容高度
if (orgRect.size.height > 200) {
noteTextHeight = orgRect.size.height;
}
[self updateViewsFrame];
}
- (void)updateViewsFrame{
if (!allViewHeight) {
allViewHeight = 0;
}
if (!noteTextHeight) {
noteTextHeight = 100;
}
}
- (BOOL)textView:(UITextView *)textView shouldChangeTextInRange:(NSRange)range replacementText:(NSString *)text{
_textNumberLabel.text = [NSString stringWithFormat:@"%lu/200 ",(unsigned long)TtextView.text.length];
if (textView == TtextView) {
//这里的if时候为了获取删除操作,如果没有次if会造成当达到字数限制后删除键也不能使用的后果.
if (range.length == 1 && text.length == 0) {
return YES;
}
//so easy
else if (TtextView.text.length > 200) {
TtextView.text = [TtextView.text substringToIndex:200];
return NO;
}
}
return YES;
}
-(void)textViewDidChange:(UITextView *)textView
{
label.text = textView.text;
if (textView.text.length == 0) {
label.text = @"点击输入描述(200字以内)";
}else{
label.text = @"";
}
}
- (BOOL)textView:(UITextView *)textView shouldChangeTextInRange:(NSRange)range replacementText:(NSString *)text{
// 限制苹果系统输入法 禁止输入表情
if ([[[UITextInputMode currentInputMode]primaryLanguage] isEqualToString:@"emoji"]) {
return NO;
}
return YES;
}
限制UITextView的字数和字数监控,表情异常的情况和禁用表情的更多相关文章
- ios中实现对UItextField,UITextView等输入框的字数限制
本文转载至 http://blog.sina.com.cn/s/blog_9bf272cf01013lsd.html 2011-10-05 16:48 533人阅读 评论(0) 收藏 举报 1. ...
- SQL SERVER 监控数据文件增长情况
在项目前期评估数据库的增长情况,然后根据数据库数据量的增长情况来规划存储的分配其实是一件比较麻烦的事情.因为项目没有上线,用什么来评估数据库的数据增长情况呢? 如果手头没有实际的数据,我们只能从表的数 ...
- MHA监控进程异常退出
这两天遇到一个非常诡异的问题,打算和大家分享一下.只所以诡异估计是自己知识面不够吧.线上的MHA一直没有开启自动切换,都是手动切换的,最近开启了自动切换以后,退出securecrt窗口以后发现监控进程 ...
- advanceskeleton插件分身体和表情单独绑定的时候合并表情步骤
advanceskeleton插件分身体和表情单独绑定的时候合并表情使用的代码以及合并步骤 1.身体单独绑定 2.表情单独绑定 3.合并步骤 ①原有adv表情文件删掉除了curve组以外所有东西 删除 ...
- 监控JVM内存使用情况,剩余空间小于2M时报警
一个简单的类,用来监控JVM内存使用情况,剩余空间小于2M时报警. import java.lang.management.ManagementFactory; import java.lang.ma ...
- 通过ngxtop实时监控webserver的访问情况 / 解决ImportError: No module named _sqlite3问题
通过ngxtop实时监控webserver的访问情况 2014-04-03 0个评论 来源:通过ngxtop实时监控web server的访问情况 收藏 我要投稿 关于对ng ...
- 使用libvirt技术监控虚拟机资源利用情况
使用libvirt技术监控虚拟机资源利用情况 (一)计算资源与内存资源的监控 libvirt中提供virDomainGetInfo方法可以将一个domain的计算资源和内存资源的使用情况封装在一个结构 ...
- UITextView输入中文时限制字数
最近因为项目中输入用户简称时限制长度,被测试部多次提交问题,最终将解决方法分享给大家. 刚开始用最简单的方法,在textView的代理方法里面做处理 - (void)textViewDidChange ...
- textView中判断文本长度,自定义表情长度为1,emoj表情长度为1,输入限制
static const int MAX_LIMIT_NUMS = 100; /**< 输入个数限制 */ // self.inputNumberTipsLabel 控制器的view上一个用 ...
随机推荐
- sublime text3 无法安装插件
下载 Package Control.sublime-package 点击这里下载: 打开sublime3 -> 首选项 -> 浏览插件 (程序自动打开插件目录) 删除 Package C ...
- hdu 2654(欧拉函数)
Become A Hero Time Limit: 15000/5000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others)To ...
- Jquery 返回json数据在IE浏览器中提示下载的问题
Jquery 返回json数据,IE浏览器提示下载的问题,当提交完数据后返回的本来是json数据的,在火弧里测试正常,解决方法如下 今天遇到Jquery 返回json数据,IE浏览器提示下载的问题,当 ...
- H5页面唤起手机号
做手机H5页面的时候经常会碰到在某一个页面会显示一个手机号,坑爹的产品会说你点击一下能不能让手机弹出号码,然后拨打出去,我试了试各种百度来的方法都是失败的,比如下面的这个: <a href=&q ...
- UVA - 11774 Doom's Day
看样例猜结论hhhhhh,竟然蒙对了..(正确性待证明) #include<bits/stdc++.h> #define ll long long using namespace std; ...
- 【转】浅谈多核CPU、多线程、多进程
浅谈多核CPU.多线程.多进程 1.CPU发展趋势 核心数目依旧会越来越多,依据摩尔定律,由于单个核心性能提升有着严重的瓶颈问题,普通的桌面PC有望在2017年末2018年初达到24核心(或者16核3 ...
- 设计模式(1)---Factory Pattern
针对的问题:定义一个创建对象的接口,让其子类自己决定实例化哪一个工厂类,工厂模式使其创建过程延迟到子类进行. 第一步:创建接口 //创建一个接口 public interface Shape { pu ...
- asp.net站点从2003服务器迁移到2008服务器出现定义了重复的“system.web.extensions/scripting/scriptResourceHandler”节的问题解决
解决方法: 1.从4.0降到2.0. 2.直接删除整个节点,如下:
- Mark S. Rasmussen improve.dk-----knife-for-mdf-files
http://improve.dk/orcamdf-rawdatabase-a-swiss-army-knife-for-mdf-files/ http://www.cnblogs.com/lyhab ...
- 获取元素位置信息和所占空间大小(via:js&jquery)
工作中有一个很常见的需求,hover或者click某元素后,在该元素旁边出现弹框,主要就是获取该元素的位置坐标以及元素所占区块的大小.最近工作中就遇到了,发现js和jquery的实现方法有很大的区别, ...