ios给textView提价提示性文字
不推荐使用的方式
但是在用的时候才发现原来textView没有类似于textField的那种placeholder功能。所谓placeholder就比如用户看到一个输入框,然后输入框里面一般会有几个浅灰色的文字,告诉用户这个地方是用来写什么内容的,当用户开始输入的时候,这几个文字就自然而然地消失了。这几个文字就是'Placeholder'。
在.m文件中实现textview delegate的两个方法:
注意:不要忘了在textView的位置写上
textView.delegate = self;
(BOOL) textViewShouldBeginEditing:(UITextView *)textView
{
if(textView.tag == 0) {
textView.text = @"";
textView.textColor = [UIColor blackColor];
textView.tag = 1;
}
return YES;
}
- (void)textViewDidChange:(UITextView *)textView
{
if([textView.text length] == 0)
{
textView.text = @"Foobar placeholder";
textView.textColor = [UIColor lightGrayColor];
textView.tag = 0;
}
}
Tip:使用textView的代理需要在头文件中加入: <UITextViewDelegate>
注意:这种方法确实可以实现我们想要的功能,但是有一个很明显的bug:如果用户输入了几个字以后,想全部删除了重新输入内容,那就会发现你永远都没法删除干净,因为当你把最后一个字后,textViewDidChange方法就监测到textView.text的 length = 0了 于是就会自动帮你不上你想要显示的placeholder。。。可以脑补下那个画面,疯狂地删除,却怎么也删不干净。
建议采用以下方法
然后就采用了另外的方法,就是添加一个label,这个label里面写入你想要显示的placeholder,然后还是在textViewDidChange方法里面,如果当前的text长度为0,就把label显示出来,否则的话,就把Label隐藏了。
把我的程序里面和这部分内容相关的摘出来吧:
.h文件
@interface FeedbackViewController : UIViewController<UITextViewDelegate,UIAlertViewDelegate> @propert(strong,nonatomic) IBOutlet UITextView *textView; @end
.m文件
viewDidLoad函数:
- (void)viewDidLoad {
[super viewDidLoad];
// Do any additional setup after loading the view. label = [[UILabel alloc]initWithFrame:CGRectMake(3, 3, 200, 20)];
label.enabled = NO;
label.text = @"在此输入反馈意见";
label.font = [UIFont systemFontOfSize:15];
label.textColor = [UIColor lightGrayColor];
[self.textView addSubview:label];
}
初始化的时候把label的内容设置一下。注意这个label是添加在textView里面的,我调试了一下 起始位置(3,3)是个还算不错的位置。注意要把label设置成不可点击。
//TextView Delegate
//可以判断是否超出最大限额 如140 (可写这个方法也可不写)
- (BOOL)textView:(UITextView *)textView shouldChangeTextInRange:(NSRange)range replacementText:(NSString *)text{
if ([text isEqualToString:@""] && range.length > 0) {
//删除字符肯定是安全的
return YES;
} else{
if (textView.text.length - range.length + text.length > 140) {
UIAlertView *alert = [[UIAlertView alloc] initWithTitle:@"超出最大可输入长度" message:nil delegate:self cancelButtonTitle:@"确定" otherButtonTitles:nil];//如果输入的文字大于140 则提示 <span style="font-family: Arial, Helvetica, sans-serif;">"超出最大可输入长度" 并不能继续输入文字</span>
[alert show];
return NO;
} else {
return YES;
}
}
}
- (void) textViewDidChange:(UITextView *)textView{
if ([textView.text length] == 0) {
[label setHidden:NO];
}else{
[label setHidden:YES];
}
}
ios给textView提价提示性文字的更多相关文章
- Html标签中Alt和Title都是提示性语言标签
在Html标签中Alt和Title都是提示性语言标签,在我们浏览一些网页时,鼠标停留在一张图片或文字链接上时,在鼠标的右下角出现一个提示信息框,对目标进行一定的注释说明,这就是它们的作用. 其中 ...
- 浅谈ClickableSpan , 实现TextView文本某一部分文字的点击响应
超文本:http://www.baidu.com 这么一个效果:一行文本当中 前面显示黑色颜色的“超文本:”,后面显示红色颜色的“http://www.baidu.com” 并且要求红色字体的部分可以 ...
- Android TextView中有图片有文字混合排列
Android TextView中有图片有文字混合排列 1.使用html.fromHtml 2.新建ImageGetter 3.使用<img src>标签 demo: 1.设置文字 ((T ...
- android - TextView单行显示...或者文字左右滚动(走马灯效果)
条件 TextView单行显示,文字左右滚动(走马灯效果)实现条件: 实现单行设置固定宽度或者设置权重都行 代码 TextView滚动必须写下面几个属性 android:singleLine=&quo ...
- Android TextView(EditView)文字底部或者中间 加横线
Android TextView(EditView)文字底部或者中间 加横线 tv = (TextView) this .findViewById(R.id. text_view ); 中间加横线 t ...
- iOS中求出label中文字的行数和每一行的内容
今天遇到一个需求,需要计算label中文字的行数.想了好久也没想到好的解决方法,就在网上找了下.结果发现一篇文章是讲这个的.这部分代码不但能够求出一个label中文字行数,更厉害的是能够求出每一行的内 ...
- Android开发:文本控件详解——TextView(二)文字跑马灯效果实现
一.需要使用的属性: 1.android:ellipsize 作用:若文字过长,控制该控件如何显示. 对于同样的文字“Android开发:文本控件详解——TextView(二)文字跑马灯效果实现”,不 ...
- AJ学IOS 之微博项目实战(11)发送微博自定义TextView实现带占位文字
AJ分享,必须精品 一:效果 二:代码: 由于系统自带的UITextField:和UITextView:不能满足我们的需求,所以我们需要自己设计一个. UITextField: 1.文字永远是一行,不 ...
- TextView中的部分文字响应点击事件
TextView是android常用的控件,经常要显示不同文字的大小,颜色,......今天要实现这样这样一个需求,TextView某段内容显示的文字颜色不一样,并且点击区域只能是改变了颜色的字. 1 ...
随机推荐
- HDU 5572 An Easy Physics Problem (计算几何+对称点模板)
HDU 5572 An Easy Physics Problem (计算几何) 题目链接http://acm.hdu.edu.cn/showproblem.php?pid=5572 Descripti ...
- 关于指针要注意的地方还有尝试在codeblocks上建立项目
1.字符串: char a[]="house"; char *b="house"; a[2]='r';可以 b[2]='r'不可以,因为这个指针变量指的是字 ...
- 写Java程序的三十个基本规则【新手必读】
(1) 类名首字母应该大写.字段.方法以及对象(句柄)的首字母应小写.对于所有标识符,其中包含的所有单词都应紧靠在一起,而且大写中间单词的首字母.例如: ThisIsAClassName this ...
- Android 性能测试_Monkey 实践【转】
参考资料:1. Monkey测试策略:https://testerhome.com/topics/597 2. Android Monkey测试详细介绍:http://www.jikexueyuan. ...
- iOS开发怎么样做第三方登陆(友盟社会化分享)
基于前一篇文章 自定义UI后 实现如下代码 即可 //第三方登陆 // UMSocialSnsPlatform *snsPlatform = [UMSocialSnsPlatformMa ...
- hdu_5883_The Best Path(欧拉路)
题目链接:hdu_5883_The Best Path 题意: n 个点 m 条无向边的图,找一个欧拉通路/回路使得这个路径所有结点的异或值最大. 题解: 节点 i 的贡献为((du[i] +1/ 2 ...
- 11.hibernate的连接查询
1.创建如下javaweb项目结构 2.在项目的src下创建hibernate.cfg.xml主配置文件 <?xml version="1.0" encoding=" ...
- ARC下面的对象被释放的bug
一般在ARC管理的方式之下,很难出现对象被过度释放的问题,下面是我将遇到的一个crash. * thread #: tid = , queue = , address=0x18) frame #: f ...
- hive UDF添加方式
hive UDF添加的方式 1.添加临时函数,只能在此会话中生效,退出hive自动失效 hive> add jar /home/jtdata/hiveUDF/out0.jar; Added [/ ...
- 一步一步学EF系列 【7、结合IOC ,Repository,UnitOfWork来完成框架的搭建】
前言 距离上一篇已经有段时间了,最近这段时间赶上新项目开发,一直没有时间来写.之前的几篇文章,主要把EF的基础都讲了一遍,这批文章就来个实战篇. 个人在学习过程中参考博客: Entity Framew ...